home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / cross / GBDK-2.0.lha / GBDK / doc / asmlnk.doc next >
Text File  |  1998-10-01  |  212KB  |  6,075 lines

  1.  
  2.  
  3.          
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.                                 ASxxxx Assemblers
  27.  
  28.  
  29.                                        and
  30.  
  31.  
  32.                             ASLINK Relocating Linker
  33.  
  34.  
  35.         CHAPTER 1  THE ASSEMBLER                                     1-1 
  36.           1.1     THE ASXXXX ASSEMBLERS                              1-1 
  37.           1.1.1     Assembly Pass 1                                  1-2 
  38.           1.1.2     Assembly Pass 2                                  1-2 
  39.           1.1.3     Assembly Pass 3                                  1-2 
  40.           1.2     SOURCE PROGRAM FORMAT                              1-3 
  41.           1.2.1     Statement Format                                 1-3 
  42.           1.2.1.1     Label Field                                    1-3 
  43.           1.2.1.2     Operator Field                                 1-5 
  44.           1.2.1.3     Operand Field                                  1-5 
  45.           1.2.1.4     Comment Field                                  1-6 
  46.           1.3     SYMBOLS AND EXPRESSIONS                            1-6 
  47.           1.3.1     Character Set                                    1-6 
  48.           1.3.2     User-Defined Symbols                            1-10 
  49.           1.3.3     Local Symbols                                   1-11 
  50.           1.3.4     Current Location Counter                        1-12 
  51.           1.3.5     Numbers                                         1-14 
  52.           1.3.6     Terms                                           1-14 
  53.           1.3.7     Expressions                                     1-15 
  54.           1.4     GENERAL ASSEMBLER DIRECTIVES                      1-16 
  55.           1.4.1     .module Directive                               1-16 
  56.           1.4.2     .title Directive                                1-17 
  57.           1.4.3     .sbttl Directive                                1-17 
  58.           1.4.4     .page Directive                                 1-17 
  59.           1.4.5     .byte and .db Directives                        1-17 
  60.           1.4.6     .word and .dw Directives                        1-18 
  61.           1.4.7     .blkb, .blkw, and .ds Directives                1-18 
  62.           1.4.8     .ascii Directive                                1-18 
  63.           1.4.9     .ascis Directive                                1-19 
  64.           1.4.10    .asciz Directive                                1-19 
  65.           1.4.11    .radix Directive                                1-20 
  66.           1.4.12    .even Directive                                 1-20 
  67.           1.4.13    .odd Directive                                  1-20 
  68.           1.4.14    .area Directive                                 1-21 
  69.           1.4.15    .org Directive                                  1-22 
  70.           1.4.16    .globl Directive                                1-23 
  71.           1.4.17    .if, .else, and .endif Directives               1-23 
  72.           1.4.18    .include Directive                              1-24 
  73.           1.4.19    .setdp Directive                                1-25 
  74.           1.5     INVOKING ASXXXX                                   1-27 
  75.           1.6     ERRORS                                            1-28 
  76.           1.7     LISTING FILE                                      1-29 
  77.           1.8     SYMBOL TABLE FILE                                 1-30 
  78.           1.9     OBJECT FILE                                       1-31 
  79.  
  80.         CHAPTER 2  THE LINKER                                        2-1 
  81.           2.1     ASLINK RELOCATING LINKER                           2-1 
  82.           2.2     INVOKING ASLINK                                    2-2 
  83.           2.3     LIBRARY PATH(S) AND FILE(S)                        2-3 
  84.           2.4     ASLINK PROCESSING                                  2-4 
  85.           2.5     LINKER INPUT FORMAT                                2-5 
  86.           2.5.1     Object Module Format                             2-6 
  87.           2.5.2     Header Line                                      2-6 
  88.           2.5.3     Module Line                                      2-6 
  89.           2.5.4     Symbol Line                                      2-6 
  90.           2.5.5     Area Line                                        2-7 
  91.  
  92.  
  93.                                                                  Page ii
  94.         
  95.  
  96.  
  97.           2.5.6     T Line                                           2-7 
  98.           2.5.7     R Line                                           2-7 
  99.           2.5.8     P Line                                           2-8 
  100.           2.6     LINKER ERROR MESSAGES                              2-8 
  101.           2.7     INTEL HEX OUTPUT FORMAT                           2-11 
  102.           2.8     MOTORLA S1-S9 OUTPUT FORMAT                       2-12 
  103.  
  104.         CHAPTER 3  BUILDING ASXXXX AND ASLINK                        3-1 
  105.           3.1     BUILDING AN ASSEMBLER                              3-1 
  106.           3.2     BUILDING ASLINK                                    3-2 
  107.  
  108.         APPENDIX A  AS6800 ASSEMBLER                                 A-1 
  109.           A.1     6800 REGISTER SET                                  A-1 
  110.           A.2     6800 INSTRUCTION SET                               A-1 
  111.           A.2.1     Inherent Instructions                            A-2 
  112.           A.2.2     Branch Instructions                              A-2 
  113.           A.2.3     Single Operand Instructions                      A-3 
  114.           A.2.4     Double Operand Instructions                      A-4 
  115.           A.2.5     Jump and Jump to Subroutine Instructions         A-4 
  116.           A.2.6     Long Register Instructions                       A-5 
  117.  
  118.         APPENDIX B  AS6801 ASSEMBLER                                 B-1 
  119.           B.1     .hd6303 DIRECTIVE                                  B-1 
  120.           B.2     6801 REGISTER SET                                  B-1 
  121.           B.3     6801 INSTRUCTION SET                               B-1 
  122.           B.3.1     Inherent Instructions                            B-2 
  123.           B.3.2     Branch Instructions                              B-2 
  124.           B.3.3     Single Operand Instructions                      B-3 
  125.           B.3.4     Double Operand Instructions                      B-4 
  126.           B.3.5     Jump and Jump to Subroutine Instructions         B-5 
  127.           B.3.6     Long Register Instructions                       B-5 
  128.           B.3.7     6303 Specific Instructions                       B-5 
  129.  
  130.         APPENDIX C  AS6804 ASSEMBLER                                 C-1 
  131.           C.1     6804 REGISTER SET                                  C-1 
  132.           C.2     6804 INSTRUCTION SET                               C-1 
  133.           C.2.1     Inherent Instructions                            C-2 
  134.           C.2.2     Branch Instructions                              C-2 
  135.           C.2.3     Single Operand Instructions                      C-2 
  136.           C.2.4     Jump and Jump to Subroutine Instructions         C-2 
  137.           C.2.5     Bit Test Instructions                            C-2 
  138.           C.2.6     Load Immediate data Instruction                  C-3 
  139.           C.2.7     6804 Derived Instructions                        C-3 
  140.  
  141.         APPENDIX D  AS6805 ASSEMBLER                                 D-1 
  142.           D.1     6805 REGISTER SET                                  D-1 
  143.           D.2     6805 INSTRUCTION SET                               D-1 
  144.           D.2.1     Control Instructions                             D-2 
  145.           D.2.2     Bit Manipulation Instructions                    D-2 
  146.           D.2.3     Branch Instructions                              D-2 
  147.           D.2.4     Read-Modify-Write Instructions                   D-3 
  148.           D.2.5     Register\Memory Instructions                     D-3 
  149.  
  150.  
  151.                                                                 Page iii
  152.         
  153.  
  154.  
  155.           D.2.6     Jump and Jump to Subroutine Instructions         D-4 
  156.  
  157.         APPENDIX E  AS6808 ASSEMBLER                                 E-1 
  158.           E.1     68HC08 REGISTER SET                                E-1 
  159.           E.2     68HC08 INSTRUCTION SET                             E-1 
  160.           E.2.1     Control Instructions                             E-2 
  161.           E.2.2     Bit Manipulation Instructions                    E-2 
  162.           E.2.3     Branch Instructions                              E-3 
  163.           E.2.4     Complex Branch Instructions                      E-3 
  164.           E.2.5     Read-Modify-Write Instructions                   E-4 
  165.           E.2.6     Register\Memory Instructions                     E-5 
  166.           E.2.7     Double Operand Move Instruction                  E-5 
  167.           E.2.8     16-Bit <H:X> Index Register Instructions         E-5 
  168.           E.2.9     Jump and Jump to Subroutine Instructions         E-5 
  169.  
  170.         APPENDIX F  AS6809 ASSEMBLER                                 F-1 
  171.           F.1     6809 REGISTER SET                                  F-1 
  172.           F.2     6809 INSTRUCTION SET                               F-1 
  173.           F.2.1     Inherent Instructions                            F-3 
  174.           F.2.2     Short Branch Instructions                        F-3 
  175.           F.2.3     Long Branch Instructions                         F-3 
  176.           F.2.4     Single Operand Instructions                      F-4 
  177.           F.2.5     Double Operand Instructions                      F-5 
  178.           F.2.6     D-register Instructions                          F-5 
  179.           F.2.7     Index/Stack Register Instructions                F-5 
  180.           F.2.8     Jump and Jump to Subroutine Instructions         F-6 
  181.           F.2.9     Register - Register Instructions                 F-6 
  182.           F.2.10    Condition Code Register Instructions             F-6 
  183.           F.2.11    6800 Compatibility Instructions                  F-6 
  184.  
  185.         APPENDIX G  AS6811 ASSEMBLER                                 G-1 
  186.           G.1     68HC11 REGISTER SET                                G-1 
  187.           G.2     68HC11 INSTRUCTION SET                             G-1 
  188.           G.2.1     Inherent Instructions                            G-2 
  189.           G.2.2     Branch Instructions                              G-2 
  190.           G.2.3     Single Operand Instructions                      G-3 
  191.           G.2.4     Double Operand Instructions                      G-4 
  192.           G.2.5     Bit Manupulation Instructions                    G-4 
  193.           G.2.6     Jump and Jump to Subroutine Instructions         G-5 
  194.           G.2.7     Long Register Instructions                       G-5 
  195.  
  196.         APPENDIX H  AS6812 ASSEMBLER                                 H-1 
  197.           H.1     68HC12 REGISTER SET                                H-1 
  198.           H.2     68HC12 INSTRUCTION SET                             H-1 
  199.           H.2.1     Inherent Instructions                            H-3 
  200.           H.2.2     Short Branch Instructions                        H-3 
  201.           H.2.3     Long Branch Instructions                         H-3 
  202.           H.2.4     Branch on Decrement, Test, or Increment          H-4 
  203.           H.2.5     Bit Clear and Set Instructions                   H-4 
  204.           H.2.6     Branch on Bit Clear or Set                       H-4 
  205.           H.2.7     Single Operand Instructions                      H-5 
  206.           H.2.8     Double Operand Instructions                      H-6 
  207.  
  208.  
  209.                                                                  Page iv
  210.         
  211.  
  212.  
  213.           H.2.9     Move Instructions                                H-6 
  214.           H.2.10    D-register Instructions                          H-6 
  215.           H.2.11    Index/Stack Register Instructions                H-7 
  216.           H.2.12    Jump and Jump/Call to Subroutine
  217.                     Instructions                                     H-7 
  218.           H.2.13    Other Special Instructions                       H-7 
  219.           H.2.14    Register - Register Instructions                 H-7 
  220.           H.2.15    Condition Code Register Instructions             H-7 
  221.           H.2.16    M68HC11 Compatibility Mode Instructions          H-8 
  222.  
  223.         APPENDIX I  AS6816 ASSEMBLER                                 I-1 
  224.           I.1     68HC16 REGISTER SET                                I-1 
  225.           I.2     68HC16 INSTRUCTION SET                             I-1 
  226.           I.2.1     Inherent Instructions                            I-2 
  227.           I.2.2     Push/Pull Multiple Register Instructions         I-3 
  228.           I.2.3     Short Branch Instructions                        I-3 
  229.           I.2.4     Long Branch Instructions                         I-3 
  230.           I.2.5     Bit Manipulation Instructions                    I-3 
  231.           I.2.6     Single Operand Instructions                      I-4 
  232.           I.2.7     Double Operand Instructions                      I-5 
  233.           I.2.8     Index/Stack Register Instructions                I-5 
  234.           I.2.9     Jump and Jump to Subroutine Instructions         I-6 
  235.           I.2.10    Condition Code Register Instructions             I-6 
  236.           I.2.11    Multiply and Accumulate Instructions             I-6 
  237.  
  238.         APPENDIX J  ASH8 ASSEMBLER                                   J-1 
  239.           J.1     H8/3XX REGISTER SET                                J-1 
  240.           J.2     H8/3XX INSTRUCTION SET                             J-1 
  241.           J.2.1     Inherent Instructions                            J-2 
  242.           J.2.2     Branch Instructions                              J-2 
  243.           J.2.3     Single Operand Instructions                      J-3 
  244.           J.2.4     Double Operand Instructions                      J-4 
  245.           J.2.5     Mov Instructions                                 J-5 
  246.           J.2.6     Bit Manipulation Instructions                    J-6 
  247.           J.2.7     Extended Bit Manipulation Instructions           J-7 
  248.           J.2.8     Condition Code Instructions                      J-7 
  249.           J.2.9     Other Instructions                               J-8 
  250.           J.2.10    Jump and Jump to Subroutine Instructions         J-8 
  251.  
  252.         APPENDIX K  AS8085 ASSEMBLER                                 K-1 
  253.           K.1     8085 REGISTER SET                                  K-1 
  254.           K.2     8085 INSTRUCTION SET                               K-1 
  255.           K.2.1     Inherent Instructions                            K-2 
  256.           K.2.2     Register/Memory/Immediate Instructions           K-2 
  257.           K.2.3     Call and Return Instructions                     K-2 
  258.           K.2.4     Jump Instructions                                K-2 
  259.           K.2.5     Input/Output/Reset Instructions                  K-3 
  260.           K.2.6     Move Instructions                                K-3 
  261.           K.2.7     Other Instructions                               K-3 
  262.  
  263.         APPENDIX L  ASZ80 ASSEMBLER                                  L-1 
  264.           L.1     .hd64 DIRECTIVE                                    L-1 
  265.  
  266.  
  267.                                                                   Page v
  268.         
  269.  
  270.  
  271.           L.2     Z80 REGISTER SET AND CONDITIONS                    L-1 
  272.           L.3     Z80 INSTRUCTION SET                                L-2 
  273.           L.3.1     Inherent Instructions                            L-3 
  274.           L.3.2     Implicit Operand Instructions                    L-3 
  275.           L.3.3     Load Instruction                                 L-4 
  276.           L.3.4     Call/Return Instructions                         L-4 
  277.           L.3.5     Jump and Jump to Subroutine Instructions         L-4 
  278.           L.3.6     Bit Manipulation Instructions                    L-5 
  279.           L.3.7     Interrupt Mode and Reset Instructions            L-5 
  280.           L.3.8     Input and Output Instructions                    L-5 
  281.           L.3.9     Register Pair Instructions                       L-5 
  282.           L.3.10    HD64180 Specific Instructions                    L-6 
  283.  
  284.         APPENDIX M  AS6500 ASSEMBLER                                 M-1 
  285.           M.1     ACKNOWLEDGMENT                                     M-1 
  286.           M.2     6500 REGISTER SET                                  M-2 
  287.           M.3     6500 INSTRUCTION SET                               M-2 
  288.           M.3.1     Processor Specific Directives                    M-3 
  289.           M.3.2     65xx Core Inherent Instructions                  M-3 
  290.           M.3.3     65xx Core Branch Instructions                    M-3 
  291.           M.3.4     65xx Core Single Operand Instructions            M-3 
  292.           M.3.5     65xx Core Double Operand Instructions            M-4 
  293.           M.3.6     65xx Core Jump and Jump to Subroutine
  294.                     Instructions                                     M-4 
  295.           M.3.7     65xx Core Miscellaneous X and Y Register
  296.                     Instructions                                     M-4 
  297.           M.3.8     65F11 and 65F12 Specific Instructions            M-5 
  298.           M.3.9     65C00/21 and 65C29 Specific Instructions         M-5 
  299.           M.3.10    65C02, 65C102, and 65C112 Specific
  300.                     Instructions                                     M-6 
  301.  
  302.  
  303.                                                                  Page vi
  304.         
  305.  
  306.  
  307.         ASxxxx Cross Assemblers, Version 1.75 
  308.  
  309.         Submitted by:  
  310.         Alan R.  Baldwin, 
  311.         Physics Dept.  
  312.         Kent State University 
  313.         Kent, Ohio 44242 
  314.  
  315.         Operating System:  TSX+, RT-11, PDOS, MS/DOS, Windows 3.x/95 
  316.         or other supporting K&R C.  
  317.  
  318.         Source Langauge:  C 
  319.  
  320.            The ASxxxx Cross Assembler and Linker package (V1.75 October
  321.         1996) contains cross assemblers for the 6800(6802/6808),
  322.         6801(hd6303), 6804, 6805, 68HC08, 6809, 68HC11, 68HC12, 68HC16,
  323.         8085(8080), z80(hd64180), H8/3xx, and 6500 series microproces-
  324.         sors.  Complete source code is provided with the assem-
  325.         bler/linker submission.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.            The ASxxxx Cross Assembler and Linker package is available
  332.         from Kent State University at shop-pdp.kent.edu by "anonymous"
  333.         FTP or through the web page at http://shop-pdp.kent.edu/.  
  334.  
  335.  
  336.                                                                 Page vii
  337.         
  338.  
  339.  
  340.          
  341.  
  342.  
  343.  
  344.  
  345.                                   P R E F A C E
  346.  
  347.  
  348.  
  349.  
  350.  
  351.            The  ASxxxx  assemblers  were  written following the style of
  352.         several cross assemblers found in the Digital Equipment Corpora-
  353.         tion  Users  Society  (DECUS)  distribution of the C programming
  354.         language.  The DECUS code was provided with no documentation  as
  355.         to  the  input  syntax  or the output format.  Study of the code
  356.         revealed that the unknown author of the code  had  attempted  to
  357.         formulate  an assembler with attributes similiar to those of the
  358.         PDP-11 MACRO assembler (without macro's).  The  incomplete  code
  359.         from  the  DECUS C distribution has been largely rewritten, only
  360.         the program structure, and C source  file  organization  remains
  361.         relatively  unchanged.   However, I wish to thank the author for
  362.         his contribution to this set of assemblers.  
  363.  
  364.            The  ASLINK  program was written as a companion to the ASxxxx
  365.         assemblers, its design and implementation was not  derived  from
  366.         any other work.  
  367.  
  368.            The  ASxxxx  assemblers  and the ASLINK relocating linker are
  369.         placed in the Public Domain.   Publication  or  distribution  of
  370.         these programs for non-commercial use is hereby granted with the
  371.         stipulation that the  copyright  notice  be  included  with  all
  372.         copies.  
  373.  
  374.            I  would  greatly  appreciate  receiving  the  details of any
  375.         changes, additions, or errors pertaining to these  programs  and
  376.         will  attempt  to  incorporate  any  fixes  or  generally useful
  377.         changes in a future update to these programs.  
  378.  
  379.  
  380.  
  381.                 Alan R.  Baldwin 
  382.                 Kent State University 
  383.                 Physics Department 
  384.                 Kent, Ohio 44242 
  385.  
  386.  
  387.                 baldwin@shop-pdp.kent.edu 
  388.                 tel:  (330) 672 2531 
  389.                 fax:  (330) 672 2959 
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.                                     CHAPTER 1
  405.  
  406.                                   THE ASSEMBLER
  407.  
  408.  
  409.  
  410.  
  411.  
  412.         1.1  THE ASXXXX ASSEMBLERS 
  413.  
  414.  
  415.            The  ASxxxx  assemblers are a series of microprocessor assem-
  416.         blers written in the C programming language.  Each assembler has
  417.         a device specific section which includes:  
  418.  
  419.              1.  device  description, byte order, and file extension in-
  420.                  formation 
  421.  
  422.              2.  a  table  of  the assembler general directives, special
  423.                  device directives, assembler mnemonics  and  associated
  424.                  operation codes 
  425.  
  426.              3.  machine specific code for processing the device mnemon-
  427.                  ics, addressing modes, and special directives 
  428.  
  429.         The device specific information is detailed in the appendices.  
  430.  
  431.            The assemblers have a common device independent section which
  432.         handles the details of file input/output, symbol  table  genera-
  433.         tion,  program/data  areas,  expression  analysis, and assembler
  434.         directive processing.  
  435.  
  436.         The assemblers provide the following features:  
  437.  
  438.              1.  Command string control of assembly functions 
  439.  
  440.              2.  Alphabetized, formatted symbol table listing 
  441.  
  442.              3.  Relocatable object modules 
  443.  
  444.              4.  Global symbols for linking object modules 
  445.  
  446.              5.  Conditional assembly directives 
  447.  
  448.  
  449.  
  450.         THE ASSEMBLER                                           PAGE 1-2
  451.         THE ASXXXX ASSEMBLERS
  452.  
  453.  
  454.              6.  Program sectioning directives 
  455.  
  456.  
  457.            ASxxxx assembles one or more source files into a single relo-
  458.         catable ascii object file.  The output of the ASxxxx  assemblers
  459.         consists of an ascii relocatable object file(*.rel), an assembly
  460.         listing file(*.lst), and a symbol file(*.sym).  
  461.  
  462.  
  463.         1.1.1  Assembly Pass 1 
  464.  
  465.  
  466.            During  pass  1, ASxxxx opens all source files and performs a
  467.         rudimenatry assembly of each source statement.  During this pro-
  468.         cess  all symbol tables are built, program sections defined, and
  469.         number of bytes for each assembled source line is estimated.  
  470.  
  471.            At the end of pass 1 all undefined symbols may be made global
  472.         (external) using the ASxxxx switch -g, otherwise undefined  sym-
  473.         bols will be flagged as errors during succeeding passes.  
  474.  
  475.  
  476.         1.1.2  Assembly Pass 2 
  477.  
  478.  
  479.            During  pass  2  the ASxxxx assembler resolves forward refer-
  480.         ences and determines the number  of  bytes  for  each  assembled
  481.         line.   The  number  of bytes used by a particular assembler in-
  482.         struction may depend upon the addressing mode, whether  the  in-
  483.         struction allows multiple forms based upon the relative distance
  484.         to the addressed location, or other factors.   Pass  2  resolves
  485.         these cases and determines the address of all symbols.  
  486.  
  487.  
  488.         1.1.3  Assembly Pass 3 
  489.  
  490.  
  491.            Pass 3 by the assembler generates the listing file, the relo-
  492.         catable output file, and the symbol tables.  Also during pass  3
  493.         the errors will be reported.  
  494.  
  495.            The  relocatable object file is an ascii file containing sym-
  496.         bol references and definitions, program  area  definitions,  and
  497.         the  relocatable assembled code, the linker ASLINK will use this
  498.         information to generate an absolute load file (Motorola or Intel
  499.         formats).  
  500.  
  501.  
  502.  
  503.  
  504.         THE ASSEMBLER                                           PAGE 1-3
  505.         SOURCE PROGRAM FORMAT
  506.  
  507.  
  508.         1.2  SOURCE PROGRAM FORMAT 
  509.  
  510.  
  511.  
  512.         1.2.1  Statement Format 
  513.  
  514.  
  515.            A source program is composed of assembly-language statements.
  516.         Each statement must be completed on one line.  A line  may  con-
  517.         tain a maximum of 128 characters, longer lines are truncated and
  518.         lost.  
  519.  
  520.            An  ASxxxx  assembler  statement  may  have  as  many as four
  521.         fields.  These fields are identified by their order  within  the
  522.         statement  and/or  by separating characters between fields.  The
  523.         general format of the ASxxxx statement is:  
  524.  
  525.               [label:]  Operator        Operand         [;Comment(s)] 
  526.  
  527.            The  label and comment fields are optional.  The operator and
  528.         operand fields are interdependent.  The operator field may be an
  529.         assembler  directive or an assembly mnemonic.  The operand field
  530.         may be optional or required as defined in  the  context  of  the
  531.         operator.  
  532.  
  533.            ASxxxx  interprets  and  processes source statements one at a
  534.         time.  Each statement causes a particular operation to  be  per-
  535.         formed.  
  536.  
  537.  
  538.         1.2.1.1  Label Field  - 
  539.  
  540.            A  label is a user-defined symbol which is assigned the value
  541.         of the current location counter and entered into  the  user  de-
  542.         fined  symbol  table.   The  current location counter is used by
  543.         ASxxxx to assign memory addresses to the source  program  state-
  544.         ments as they are encountered during the assembly process.  Thus
  545.         a label is a means  of  symbolically  referring  to  a  specific
  546.         statement.  
  547.  
  548.            When  a program section is absolute, the value of the current
  549.         location counter is absolute;  its value references an  absolute
  550.         memory  address.   Similarly, when a program section is relocat-
  551.         able, the value of the current location counter is  relocatable.
  552.         A  relocation  bias  calculated at link time is added to the ap-
  553.         parent value of the current location counter  to  establish  its
  554.         effective  absolute  address  at  execution time.  (The user can
  555.         also force the linker to relocate sections defined as  absolute.
  556.         This may be required under special circumstances.) 
  557.  
  558.            If  present,  a  label  must  be  the first field in a source
  559.         statement and must be terminated by a colon (:).   For  example,
  560.  
  561.  
  562.         THE ASSEMBLER                                           PAGE 1-4
  563.         SOURCE PROGRAM FORMAT
  564.  
  565.  
  566.         if  the  value  of  the  current  location  counter  is absolute
  567.         01F0(H), the statement:  
  568.  
  569.               abcd:     nop 
  570.  
  571.         assigns  the  value  01F0(H) to the label abcd.  If the location
  572.         counter value were relocatable, the final value of abcd would be
  573.         01F0(H)+K, where K represents the relocation bias of the program
  574.         section, as calculated by the linker at link time.  
  575.  
  576.            More  than  one label may appear within a single label field.
  577.         Each label so specified is assigned the same address value.  For
  578.         example,  if  the  value  of  the  current  location  counter is
  579.         1FF0(H), the multiple labels in the following statement are each
  580.         assigned the value 1FF0(H):  
  581.  
  582.               abcd:     aq:     $abc:   nop 
  583.  
  584.            Multiple labels may also appear on successive lines.  For ex-
  585.         ample, the statements 
  586.  
  587.               abcd:  
  588.               aq:  
  589.               $abc:     nop 
  590.  
  591.         likewise  cause  the  same value to be assigned to all three la-
  592.         bels.  
  593.  
  594.            A  double  colon  (::)  defines the label as a global symbol.
  595.         For example, the statement 
  596.  
  597.               abcd::    nop 
  598.  
  599.         establishes the label abcd as a global symbol.  The distinguish-
  600.         ing attribute of a global symbol is that it  can  be  referenced
  601.         from  within an object module other than the module in which the
  602.         symbol is defined.  References to this label  in  other  modules
  603.         are  resolved when the modules are linked as a composite execut-
  604.         able image.  
  605.  
  606.         The legal characters for defining labels are:  
  607.  
  608.                 A through Z 
  609.                 a through z 
  610.                 0 through 9 
  611.                 . (Period) 
  612.                 $ (Dollar sign) 
  613.                 _ (underscore) 
  614.  
  615.            A  label may be any length, however, only the first eight (8)
  616.         characters are significant and, therefore must be  unique  among
  617.         all   labels  in  the  source  program  (not  necessarily  among
  618.  
  619.  
  620.         THE ASSEMBLER                                           PAGE 1-5
  621.         SOURCE PROGRAM FORMAT
  622.  
  623.  
  624.         separately compiled modules).  An error code(s) (m or p) will be
  625.         generated  in the assembly listing if the first eight characters
  626.         in two or more labels are the same.  The m code is caused by the
  627.         redeclaration  of  the symbol or its reference by another state-
  628.         ment.  The p code is generated because the symbols  location  is
  629.         changing on each pass through the source file.  
  630.  
  631.            The  label  must  not  start with the characters 0-9, as this
  632.         designates a local symbol with special attributes described in a
  633.         later section.  
  634.  
  635.            The  label  must  not  start  with  the  sequence $$, as this
  636.         represents the temporary radix 16 for constants.  
  637.  
  638.  
  639.         1.2.1.2  Operator Field  - 
  640.  
  641.            The  operator field specifies the action to be performed.  It
  642.         may consist of an instruction mnemonic (op code) or an assembler
  643.         directive.  
  644.  
  645.            When  the  operator is an instruction mnemonic, a machine in-
  646.         struction is generated and the assembler evaluates the addresses
  647.         of  the operands which follow.  When the operator is a directive
  648.         ASxxxx performs certain control actions or processing operations
  649.         during assembly of the source program.  
  650.  
  651.            Leading  and  trailing  spaces  or tabs in the operator field
  652.         have no significance;  such characters serve  only  to  separate
  653.         the operator field from the preceeding and following fields.  
  654.  
  655.            An operator is terminated by a space, tab or end of line.  
  656.  
  657.  
  658.         1.2.1.3  Operand Field  - 
  659.  
  660.            When  the  operator is an instruction mnemonic (op code), the
  661.         operand  field  contains  program  variables  that  are  to   be
  662.         evaluated/manipulated by the operator.  
  663.  
  664.            Operands  may  be  expressions  or  symbols, depending on the
  665.         operator.  Multiple expressions used in the operand  fields  may
  666.         be  separated  by a comma.  An operand should be preceeded by an
  667.         operator field;  if it is not, the statement will give an  error
  668.         (q  or  o).   All  operands  following instruction mnemonics are
  669.         treated as expressions.  
  670.  
  671.            The operand field is terminated by a semicolon when the field
  672.         is followed  by  a  comment.   For  example,  in  the  following
  673.         statement:  
  674.  
  675.               label:    lda     abcd,x          ;Comment field 
  676.  
  677.  
  678.         THE ASSEMBLER                                           PAGE 1-6
  679.         SOURCE PROGRAM FORMAT
  680.  
  681.  
  682.  
  683.         the  tab  between lda and abcd terminates the operator field and
  684.         defines the beginning of the operand field;  a  comma  separates
  685.         the operands abcd and x;  and a semicolon terminates the operand
  686.         field and defines the beginning of the comment field.   When  no
  687.         comment  field  follows,  the operand field is terminated by the
  688.         end of the source line.  
  689.  
  690.  
  691.         1.2.1.4  Comment Field  - 
  692.  
  693.            The comment field begins with a semicolon and extends through
  694.         the end of the line.  This field is optional and may contain any
  695.         7-bit ascii character except null.  
  696.  
  697.            Comments  do not affect assembly processing or program execu-
  698.         tion.  
  699.  
  700.  
  701.         1.3  SYMBOLS AND EXPRESSIONS 
  702.  
  703.  
  704.            This  section  describes the generic components of the ASxxxx
  705.         assemblers:  the character set, the conventions observed in con-
  706.         structing  symbols,  and  the use of numbers, operators, and ex-
  707.         pressions.  
  708.  
  709.  
  710.         1.3.1  Character Set 
  711.  
  712.  
  713.            The following characters are legal in ASxxxx source programs: 
  714.  
  715.              1.  The  letters  A  through Z.  Both upper- and lower-case
  716.                  letters are acceptable.  The assemblers  are  not  case
  717.                  sensitive,  i.e.   ABCD  and abcd are the same symbols.
  718.                  (The assemblers can be made case  sensitive  by  recom-
  719.                  piling with the appropriate switches.) 
  720.  
  721.              2.  The digits 0 through 9 
  722.  
  723.              3.  The  characters . (period), $ (dollar sign), and _ (un-
  724.                  derscore).  
  725.  
  726.              4.  The special characters listed in Tables 1 through 6.  
  727.  
  728.  
  729.            Tables  1  through  6  describe  the various ASxxxx label and
  730.         field terminators, assignment operators, operand separators, as-
  731.         sembly, unary, binary, and radix operators.  
  732.  
  733.  
  734.         THE ASSEMBLER                                           PAGE 1-7
  735.         SYMBOLS AND EXPRESSIONS
  736.  
  737.  
  738.         Table 1         Label Terminators and Assignment Operators 
  739.         ---------------------------------------------------------------- 
  740.  
  741.                 :   Colon               Label terminator.  
  742.  
  743.                 ::  Double colon        Label  Terminator;   defines the
  744.                                         label as a global label.  
  745.  
  746.                 =   Equal sign          Direct assignment operator.  
  747.  
  748.                 ==  Double equal        Direct assignment operator;  
  749.                     sign                defines  the  symbol as a global
  750.                                         symbol.  
  751.  
  752.         ---------------------------------------------------------------- 
  753.  
  754.  
  755.  
  756.  
  757.  
  758.         Table 2         Field Terminators and Operand Separators 
  759.         ---------------------------------------------------------------- 
  760.  
  761.                     Tab                 Item or field terminator.  
  762.  
  763.                     Space               Item or field terminator.  
  764.  
  765.                 ,   Comma               Operand field separator.  
  766.  
  767.                 ;   Semicolon           Comment field indicator.  
  768.  
  769.         ---------------------------------------------------------------- 
  770.  
  771.  
  772.  
  773.  
  774.  
  775.         Table 3         Assembler Operators 
  776.         ---------------------------------------------------------------- 
  777.  
  778.                 #   Number sign         Immediate expression indicator. 
  779.  
  780.                 .   Period              Current location counter.  
  781.  
  782.                 (   Left parenthesis    Expression delimiter.  
  783.  
  784.                 )   Right parenthesis   Expression delimeter.  
  785.  
  786.         ---------------------------------------------------------------- 
  787.  
  788.  
  789.         THE ASSEMBLER                                           PAGE 1-8
  790.         SYMBOLS AND EXPRESSIONS
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.         Table 4         Unary Operators 
  799.         ---------------------------------------------------------------- 
  800.  
  801.                 <   Left bracket        <FEDC   Produces  the lower byte
  802.                                                 value of the expression.
  803.                                                 (DC) 
  804.  
  805.                 >   Right bracket       >FEDC   Produces  the upper byte
  806.                                                 value of the expression.
  807.                                                 (FE) 
  808.  
  809.                 +   Plus sign           +A      Positive value of A 
  810.  
  811.                 -   Minus sign          -A      Produces   the  negative
  812.                                                 (2's complement) of A.  
  813.  
  814.                 ~   Tilde               ~A      Produces the 1's comple-
  815.                                                 ment of A.  
  816.  
  817.                 '   Single quote        'D      Produces  the  value  of
  818.                                                 the character D.  
  819.  
  820.                 "   Double quote        "AB     Produces the double byte
  821.                                                 value for AB.  
  822.  
  823.                 \   Backslash           '\n     Unix style characters 
  824.                                                 \b, \f, \n, \r, \t 
  825.                                      or '\001   or octal byte values.  
  826.  
  827.         ---------------------------------------------------------------- 
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.         THE ASSEMBLER                                           PAGE 1-9
  836.         SYMBOLS AND EXPRESSIONS
  837.  
  838.  
  839.         Table 5         Binary Operators 
  840.         ---------------------------------------------------------------- 
  841.  
  842.                 <<  Double          0800 << 4   Produces the 4 bit 
  843.                     Left bracket                left-shifted   value  of
  844.                                                 0800.  (8000) 
  845.  
  846.                 >>  Double          0800 >> 4   Produces the 4 bit 
  847.                     Right bracket               right-shifted  value  of
  848.                                                 0800.  (0080) 
  849.  
  850.                 +   Plus sign       A + B       Arithmetic      Addition
  851.                                                 operator.  
  852.  
  853.                 -   Minus sign      A - B       Arithmetic   Subtraction
  854.                                                 operator.  
  855.  
  856.                 *   Asterisk        A * B       Arithmetic   Multiplica-
  857.                                                 tion operator.   (signed
  858.                                                 16-bit) 
  859.  
  860.                 /   Slash           A / B       Arithmetic      Division
  861.                                                 operator.        (signed
  862.                                                 16-bit quotient) 
  863.  
  864.                 &   Ampersand       A & B       Logical AND operator.  
  865.  
  866.                 |   Bar             A | B       Logical OR operator.  
  867.  
  868.                 %   Percent sign    A % B       Modulus operator.  
  869.                                                 (16-bit value) 
  870.  
  871.                 ^   Up arrow or     A ^ B       EXCLUSIVE OR operator.  
  872.                     circumflex 
  873.  
  874.         ---------------------------------------------------------------- 
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.         THE ASSEMBLER                                          PAGE 1-10
  883.         SYMBOLS AND EXPRESSIONS
  884.  
  885.  
  886.         Table 6         Temporary Radix Operators 
  887.         ---------------------------------------------------------------- 
  888.  
  889.                 $%,   0b, 0B            Binary radix operator.  
  890.  
  891.                 $&,   0o, 0O, 0q, 0Q    Octal radix operator.  
  892.  
  893.                 $#,   0d, 0D            Decimal radix operator.  
  894.  
  895.                 $$,   0h, 0H, 0x, 0X    Hexidecimal radix operator.  
  896.  
  897.  
  898.                 Potential  ambiguities arising from the use of 0b and 0d
  899.                 as temporary radix operators may be circumvented by pre-
  900.                 ceding  all  non-prefixed  hexidecimal  numbers with 00.
  901.                 Leading 0's are required in any  case  where  the  first
  902.                 hexidecimal  digit is abcdef as the assembler will treat
  903.                 the letter sequence as a label.  
  904.  
  905.         ---------------------------------------------------------------- 
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.         1.3.2  User-Defined Symbols 
  914.  
  915.  
  916.            User-defined  symbols are those symbols that are equated to a
  917.         specific value through a direct assignment statement  or  appear
  918.         as  labels.  These symbols are added to the User Symbol Table as
  919.         they are encountered during assembly.  
  920.  
  921.         The following rules govern the creation of user-defined symbols: 
  922.  
  923.              1.  Symbols  can  be  composed  of alphanumeric characters,
  924.                  dollar signs ($),  periods  (.),  and  underscores  (_)
  925.                  only.  
  926.  
  927.              2.  The  first  character  of a symbol must not be a number
  928.                  (except in the case of local symbols).  
  929.  
  930.              3.  The  first eight characters of a symbol must be unique.
  931.                  A symbol can be written  with  more  than  eight  legal
  932.                  characters, but the ninth and subsequent characters are
  933.                  ignored.  
  934.  
  935.              4.  Spaces and Tabs must not be embedded within a symbol.  
  936.  
  937.  
  938.  
  939.  
  940.         THE ASSEMBLER                                          PAGE 1-11
  941.         SYMBOLS AND EXPRESSIONS
  942.  
  943.  
  944.         1.3.3  Local Symbols 
  945.  
  946.  
  947.            Local  symbols are specially formatted symbols used as labels
  948.         within a block of coding that has been delimited as a local sym-
  949.         bol  block.   Local  symbols  are  of  the form n$, where n is a
  950.         decimal integer from 0 to 255,  inclusive.   Examples  of  local
  951.         symbols are:  
  952.  
  953.               1$ 
  954.               27$ 
  955.               138$ 
  956.               244$ 
  957.  
  958.            The  range  of  a local symbol block consists of those state-
  959.         ments between two normally constructed  symbolic  labels.   Note
  960.         that a statement of the form:  
  961.  
  962.               ALPHA = EXPRESSION 
  963.  
  964.         is a direct assignment statement but does not create a label and
  965.         thus does not delimit the range of a local symbol block.  
  966.  
  967.            Note that the range of a local symbol block may extend across
  968.         program areas.  
  969.  
  970.            Local symbols provide a convenient means of generating labels
  971.         for branch instructions and other such references  within  local
  972.         symbol  blocks.   Using local symbols reduces the possibility of
  973.         symbols with multiple definitions appearing within a  user  pro-
  974.         gram.   In  addition,  the  use  of local symbols differentiates
  975.         entry-point labels from local labels, since local labels  cannot
  976.         be referenced from outside their respective local symbol blocks.
  977.         Thus, local symbols of the same name can appear in  other  local
  978.         symbol blocks without conflict.  Local symbols require less sym-
  979.         bol table space than normal symbols.  Their use is recommended. 
  980.  
  981.            The  use of the same local symbol within a local symbol block
  982.         will generate one or both of the m or p errors.  
  983.  
  984.  
  985.         THE ASSEMBLER                                          PAGE 1-12
  986.         SYMBOLS AND EXPRESSIONS
  987.  
  988.  
  989.         Example of local symbols:  
  990.  
  991.                 a:      ldx     #atable ;get table address
  992.                         lda     #0d48   ;table length
  993.                 1$:     clr     ,x+     ;clear
  994.                         deca
  995.                         bne     1$
  996.                         
  997.                 b:      ldx     #btable ;get table address
  998.                         lda     #0d48   ;table length
  999.                 1$:     clr     ,x+     ;clear
  1000.                         deca
  1001.                         bne     1$
  1002.  
  1003.  
  1004.         1.3.4  Current Location Counter 
  1005.  
  1006.  
  1007.            The  period  (.) is the symbol for the current location coun-
  1008.         ter.  When used in the operand  field  of  an  instruction,  the
  1009.         period   represents  the  address  of  the  first  byte  of  the
  1010.         instruction:  
  1011.  
  1012.                 AS:     ldx     #.      ;The period (.) refers to
  1013.                                         ;the address of the ldx
  1014.                                         ;instruction.
  1015.  
  1016.            When  used  in  the  operand field of an ASxxxx directive, it
  1017.         represents the address of the current byte or word:  
  1018.  
  1019.                 QK = 0
  1020.         
  1021.                 .word   0xFFFE,.+4,QK   ;The operand .+4 in the .word
  1022.                                         ;directive represents a value
  1023.                                         ;stored in the second of the
  1024.                                         ;three words during assembly.
  1025.  
  1026.            If  we  assume  the  current  value of the program counter is
  1027.         0H0200, then during assembly, ASxxxx  reserves  three  words  of
  1028.         storage  starting  at  location 0H0200.  The first value, a hex-
  1029.         idecimal constant FFFE, will be stored at location 0H0200.   The
  1030.         second  value  represented  by  .+4  will  be stored at location
  1031.         0H0202, its value will be 0H0206 ( = 0H0202  +  4).   The  third
  1032.         value  defined  by  the  symbol  QK  will  be placed at location
  1033.         0H0204.  
  1034.  
  1035.            At the beginning of each assembly pass, ASxxxx resets the lo-
  1036.         cation counter.  Normally, consecutive memory locations are  as-
  1037.         signed  to  each  byte  of  object code generated.  However, the
  1038.         value of the location counter can be changed  through  a  direct
  1039.         assignment statement of the following form:  
  1040.  
  1041.  
  1042.  
  1043.         THE ASSEMBLER                                          PAGE 1-13
  1044.         SYMBOLS AND EXPRESSIONS
  1045.  
  1046.  
  1047.               . = . + expression 
  1048.  
  1049.  
  1050.            The  new  location  counter can only be specified relative to
  1051.         the current location counter.  Neglecting to specify the current
  1052.         program  counter  along with the expression on the right side of
  1053.         the assignment operator will generate the (.) error.   (Absolute
  1054.         program areas may use the .org directive to specify the absolute
  1055.         location of the current program counter.) 
  1056.  
  1057.         The following coding illustrates the use of the current location
  1058.         counter:  
  1059.  
  1060.                 .area   CODE1   (ABS)   ;program area CODE1
  1061.                                         ;is ABSOLUTE
  1062.         
  1063.                 .org    0H100           ;set location to
  1064.                                         ;0H100 absolute
  1065.         
  1066.         num1:   ldx     #.+0H10         ;The label num1 has
  1067.                                         ;the value 0H100.
  1068.                                         ;X is loaded with
  1069.                                         ;0H100 + 0H10
  1070.         
  1071.                 .org    0H130           ;location counter
  1072.                                         ;set to 0H130
  1073.         
  1074.         num2:   ldy     #.              ;The label num2 has
  1075.                                         ;the value 0H130.
  1076.                                         ;Y is loaded with
  1077.                                         ;value 0H130.
  1078.         
  1079.         
  1080.                 .area   CODE2   (REL)   ;program area CODE2
  1081.                                         ;is RELOCATABLE
  1082.         
  1083.                 . = . + 0H20            ;Set location counter
  1084.                                         ;to relocatable 0H20 of
  1085.                                         ;the program section.
  1086.         
  1087.         num3:   .word   0               ;The label num3 has
  1088.                                         ;the value
  1089.                                         ;of relocatable 0H20.
  1090.         
  1091.                 . = . + 0H40            ;will reserve 0H40
  1092.                                         ;bytes of storage as will
  1093.                 .blkb   0H40            ;or
  1094.                 .blkw   0H20
  1095.  
  1096.            The  .blkb  and .blkw directives are the preferred methods of
  1097.         allocating space.  
  1098.  
  1099.  
  1100.  
  1101.         THE ASSEMBLER                                          PAGE 1-14
  1102.         SYMBOLS AND EXPRESSIONS
  1103.  
  1104.  
  1105.         1.3.5  Numbers 
  1106.  
  1107.  
  1108.            ASxxxx  assumes that all numbers in the source program are to
  1109.         be interpreted in decimal radix unless otherwise specified.  The
  1110.         .radix  directive  may  be used to specify the default as octal,
  1111.         decimal, or hexidecimal.  Individual numbers can  be  designated
  1112.         as  binary, octal, decimal, or hexidecimal through the temporary
  1113.         radix prefixes shown in table 6.  
  1114.  
  1115.            Negative  numbers  must be preceeded by a minus sign;  ASxxxx
  1116.         translates such numbers into two's  complement  form.   Positive
  1117.         numbers may (but need not) be preceeded by a plus sign.  
  1118.  
  1119.            Numbers are always considered to be absolute values, therefor
  1120.         they are never relocatable.  
  1121.  
  1122.  
  1123.         1.3.6  Terms 
  1124.  
  1125.  
  1126.            A  term is a component of an expression and may be one of the
  1127.         following:  
  1128.  
  1129.  
  1130.              1.  A number.  
  1131.  
  1132.              2.  A symbol:  
  1133.                  1.  A  period (.) specified in an expression causes the
  1134.                      current location counter to be used.  
  1135.                  2.  A User-defined symbol.  
  1136.                  3.  An undefined symbol is assigned a value of zero and
  1137.                      inserted in the User-Defined symbol table as an un-
  1138.                      defined symbol.  
  1139.  
  1140.              3.  A single quote followed by a single ascii character, or
  1141.                  a double quote followed by two ascii characters.  
  1142.  
  1143.              4.  An  expression enclosed in parenthesis.  Any expression
  1144.                  so enclosed is evaluated and reduced to a  single  term
  1145.                  before  the remainder of the expression in which it ap-
  1146.                  pears is evaluated.  Parenthesis, for example,  may  be
  1147.                  used  to  alter the left-to-right evaluation of expres-
  1148.                  sions, (as in A*B+C versus A*(B+C)), or to apply a  un-
  1149.                  ary operator to an entire expression (as in -(A+B)).  
  1150.  
  1151.              5.  A unary operator followed by a symbol or number.  
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157.         THE ASSEMBLER                                          PAGE 1-15
  1158.         SYMBOLS AND EXPRESSIONS
  1159.  
  1160.  
  1161.         1.3.7  Expressions 
  1162.  
  1163.  
  1164.            Expressions  are  combinations  of  terms  joined together by
  1165.         binary operators.  Expressions reduce to a  16-bit  value.   The
  1166.         evaluation  of  an  expression includes the determination of its
  1167.         attributes.  A resultant expression value may be  one  of  three
  1168.         types  (as  described  later in this section):  relocatable, ab-
  1169.         solute, and external.  
  1170.  
  1171.         Expressions are evaluate with an operand hierarchy as follows:  
  1172.  
  1173.                 *       /       %       multiplication,
  1174.                                         division, and
  1175.                                         modulus first.
  1176.         
  1177.                 +       -               addition and
  1178.                                         subtraction second.
  1179.         
  1180.                 <<      >>              left shift and
  1181.                                         right shift third.
  1182.         
  1183.                 ^                       exclusive or fourth.
  1184.         
  1185.                 &                       logical and fifth.
  1186.         
  1187.                 |                       logical or last
  1188.         
  1189.                 except that unary operators take precedence over binary
  1190.                 operators.
  1191.  
  1192.  
  1193.            A  missing  or  illegal  operator  terminates  the expression
  1194.         analysis, causing error codes (o) and/or  (q)  to  be  generated
  1195.         depending upon the context of the expression itself.  
  1196.  
  1197.            At assembly time the value of an external (global) expression
  1198.         is equal to the value of the absolute part of  that  expression.
  1199.         For  example,  the expression external+4, where 'external' is an
  1200.         external symbol, has the value of 4.  This expression,  however,
  1201.         when  evaluated  at link time takes on the resolved value of the
  1202.         symbol 'external', plus 4.  
  1203.  
  1204.            Expressions,  when  evaluated  by  ASxxxx,  are  one of three
  1205.         types:  relocatable, absolute, or external.  The following  dis-
  1206.         tinctions are important:  
  1207.  
  1208.              1.  An  expression is relocatable if its value is fixed re-
  1209.                  lative to the base address of the program area in which
  1210.                  it appears;  it will have an offset value added at link
  1211.                  time.  Terms that contain labels defined in relocatable
  1212.                  program   areas   will   have   a   relocatable  value;
  1213.  
  1214.  
  1215.         THE ASSEMBLER                                          PAGE 1-16
  1216.         SYMBOLS AND EXPRESSIONS
  1217.  
  1218.  
  1219.                  similarly, a period (.) in a relocatable program  area,
  1220.                  representing  the value of the current program location
  1221.                  counter, will also have a relocatable value.  
  1222.  
  1223.              2.  An  expression  is  absolute if its value is fixed.  An
  1224.                  expression whose terms are numbers and ascii characters
  1225.                  will  reduce  to  an absolute value.  A relocatable ex-
  1226.                  pression or term minus a relocatable term,  where  both
  1227.                  elements  being  evaluated  belong  to the same program
  1228.                  area, is an absolute expression.  This is because every
  1229.                  term  in  a  program area has the same relocation bias.
  1230.                  When one term is subtracted from the other the  reloca-
  1231.                  tion bias is zero.  
  1232.  
  1233.              3.  An  expression is external (or global) if it contains a
  1234.                  single global reference (plus or minus an absolute  ex-
  1235.                  pression  value) that is not defined within the current
  1236.                  program.  Thus, an external  expression  is  only  par-
  1237.                  tially  defined following assembly and must be resolved
  1238.                  at link time.  
  1239.  
  1240.  
  1241.  
  1242.         1.4  GENERAL ASSEMBLER DIRECTIVES 
  1243.  
  1244.  
  1245.            An  ASxxxx  directive  is placed in the operator field of the
  1246.         source line.  Only one directive is  allowed  per  source  line.
  1247.         Each  directive  may  have  a blank operand field or one or more
  1248.         operands.  Legal operands differ with each directive.  
  1249.  
  1250.  
  1251.         1.4.1  .module Directive 
  1252.  
  1253.         Format:  
  1254.  
  1255.                 .module string 
  1256.  
  1257.            The .module directive causes the string to be included in the
  1258.         assemblers output file as an identifier for this particular  ob-
  1259.         ject  module.   The  string  may  be  from  1 to 8 characters in
  1260.         length.  Only one identifier is allowed  per  assembled  module.
  1261.         The  main use of this directive is to allow the linker to report
  1262.         a modules' use of undefined symbols.  At link time all undefined
  1263.         symbols  are  reported  and  the  modules  referencing  them are
  1264.         listed.  
  1265.  
  1266.  
  1267.  
  1268.  
  1269.         THE ASSEMBLER                                          PAGE 1-17
  1270.         GENERAL ASSEMBLER DIRECTIVES
  1271.  
  1272.  
  1273.         1.4.2  .title Directive 
  1274.  
  1275.         Format:  
  1276.  
  1277.                 .title  string 
  1278.  
  1279.            The .title directive provides a character string to be placed
  1280.         on the second line of each page during listing.  
  1281.  
  1282.  
  1283.         1.4.3  .sbttl Directive 
  1284.  
  1285.         Format:  
  1286.  
  1287.                 .sbttl  string 
  1288.  
  1289.            The .sbttl directive provides a character string to be placed
  1290.         on the third line of each page during listing.  
  1291.  
  1292.  
  1293.         1.4.4  .page Directive 
  1294.  
  1295.         Format:  
  1296.  
  1297.                 .page 
  1298.  
  1299.            The .page directive causes a page ejection with a new heading
  1300.         to be printed.  The new page occurs after the next line  of  the
  1301.         source  program is processed, this allows an immediately follow-
  1302.         ing .sbttl directive to appear  on  the  new  page.   The  .page
  1303.         source  line will not appear in the file listing.  Paging may be
  1304.         disabled by invoking the -p directive.  
  1305.  
  1306.  
  1307.         1.4.5  .byte and .db Directives 
  1308.  
  1309.         Format:  
  1310.  
  1311.                 .byte   exp             ;Stores the binary value
  1312.                 .db     exp             ;of the expression in the
  1313.                                         ;next byte.
  1314.         
  1315.                 .byte   exp1,exp2,expn  ;Stores the binary values
  1316.                 .db     exp1,exp2,expn  ;of the list of expressions
  1317.                                         ;in successive bytes.
  1318.         
  1319.         where:  exp,    represent expressions that will be
  1320.                 exp1,   truncated to 8-bits of data.
  1321.                 .       Each expression will be calculated
  1322.                 .       as a 16-bit word expression,
  1323.                 .       the high-order byte will be truncated.
  1324.                 .       Multiple expressions must be
  1325.  
  1326.  
  1327.         THE ASSEMBLER                                          PAGE 1-18
  1328.         GENERAL ASSEMBLER DIRECTIVES
  1329.  
  1330.  
  1331.                 expn    separated by commas.
  1332.  
  1333.            The  .byte  or .db directives are used to generate successive
  1334.         bytes of binary data in the object module.  
  1335.  
  1336.  
  1337.         1.4.6  .word and .dw Directives 
  1338.  
  1339.         Format:  
  1340.  
  1341.                 .word   exp             ;Stores the binary value
  1342.                 .dw     exp             ;of the expression in
  1343.                                         ;the next word.
  1344.         
  1345.                 .word   exp1,exp2,expn  ;Stores the binary values
  1346.                 .dw     exp1,exp2,expn  ;of the list of expressions
  1347.                                         ;in successive words.
  1348.         
  1349.         where:  exp,    represent expressions that will occupy two
  1350.                 exp1,   bytes of data. Each expression will be
  1351.                 .       calculated as a 16-bit word expression.
  1352.                 .       Multiple expressions must be
  1353.                 expn    separated by commas.
  1354.  
  1355.            The  .word  or .dw directives are used to generate successive
  1356.         words of binary data in the object module.  
  1357.  
  1358.  
  1359.         1.4.7  .blkb, .blkw, and .ds Directives 
  1360.  
  1361.         Format:  
  1362.  
  1363.                 .blkb   N       ;reserve N bytes of space
  1364.                 .blkw   N       ;reserve N words of space
  1365.                 .ds     N       ;reserve N bytes of space
  1366.  
  1367.            The  .blkb  and .ds directives reserve byte blocks in the ob-
  1368.         ject module;  the .blkw directive reserves word blocks.  
  1369.  
  1370.  
  1371.         1.4.8  .ascii Directive 
  1372.  
  1373.         Format:  
  1374.  
  1375.                 .ascii  /string/ 
  1376.  
  1377.         where:  string  is a string of printable ascii characters.  
  1378.  
  1379.                 /  /    represent   the  delimiting  characters.   These
  1380.                         delimiters   may   be   any   paired    printing
  1381.                         characters,  as  long  as the characters are not
  1382.                         contained within  the  string  itself.   If  the
  1383.  
  1384.  
  1385.         THE ASSEMBLER                                          PAGE 1-19
  1386.         GENERAL ASSEMBLER DIRECTIVES
  1387.  
  1388.  
  1389.                         delimiting  characters  do not match, the .ascii
  1390.                         directive will give the (q) error.  
  1391.  
  1392.         The  .ascii  directive  places  one binary byte of data for each
  1393.         character in the string into the object module.  
  1394.  
  1395.  
  1396.         1.4.9  .ascis Directive 
  1397.  
  1398.         Format:  
  1399.  
  1400.                 .ascis  /string/ 
  1401.  
  1402.         where:  string  is a string of printable ascii characters.  
  1403.  
  1404.                 /  /    represent   the  delimiting  characters.   These
  1405.                         delimiters   may   be   any   paired    printing
  1406.                         characters,  as  long  as the characters are not
  1407.                         contained within  the  string  itself.   If  the
  1408.                         delimiting  characters  do not match, the .ascis
  1409.                         directive will give the (q) error.  
  1410.  
  1411.         The  .ascis  directive  places  one binary byte of data for each
  1412.         character in the  string  into  the  object  module.   The  last
  1413.         character in the string will have the high order bit set.  
  1414.  
  1415.  
  1416.         1.4.10  .asciz Directive 
  1417.  
  1418.         Format:  
  1419.  
  1420.                 .asciz  /string/ 
  1421.  
  1422.         where:  string  is a string of printable ascii characters.  
  1423.  
  1424.                 /  /    represent   the  delimiting  characters.   These
  1425.                         delimiters   may   be   any   paired    printing
  1426.                         characters,  as  long  as the characters are not
  1427.                         contained within  the  string  itself.   If  the
  1428.                         delimiting  characters  do not match, the .asciz
  1429.                         directive will give the (q) error.  
  1430.  
  1431.         The  .asciz  directive  places  one binary byte of data for each
  1432.         character in the string into the object module.   Following  all
  1433.         the  character  data  a  zero  byte is inserted to terminate the
  1434.         character string.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.         THE ASSEMBLER                                          PAGE 1-20
  1440.         GENERAL ASSEMBLER DIRECTIVES
  1441.  
  1442.  
  1443.         1.4.11  .radix Directive 
  1444.  
  1445.         Format:  
  1446.  
  1447.                 .radix  character 
  1448.  
  1449.         where:  character  represents  a single character specifying the
  1450.                         default radix to be used for succeeding numbers.
  1451.                         The character may be any one of the following:  
  1452.  
  1453.                         B,b     Binary
  1454.         
  1455.                         O,o     Octal
  1456.                         Q,q
  1457.         
  1458.                         D,d     Decimal
  1459.                         'blank'
  1460.         
  1461.                         H,h     Hexidecimal
  1462.                         X,x
  1463.  
  1464.  
  1465.         1.4.12  .even Directive 
  1466.  
  1467.         Format:  
  1468.  
  1469.                 .even 
  1470.  
  1471.            The .even directive ensures that the current location counter
  1472.         contains an even boundary value by adding 1 if the current loca-
  1473.         tion is odd.  
  1474.  
  1475.  
  1476.         1.4.13  .odd Directive 
  1477.  
  1478.         Format:  
  1479.  
  1480.                 .odd 
  1481.  
  1482.            The  .odd directive ensures that the current location counter
  1483.         contains an odd boundary value by adding one if the current  lo-
  1484.         cation is even.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.         THE ASSEMBLER                                          PAGE 1-21
  1490.         GENERAL ASSEMBLER DIRECTIVES
  1491.  
  1492.  
  1493.         1.4.14  .area Directive 
  1494.  
  1495.         Format:  
  1496.  
  1497.                 .area   name    [(options)] 
  1498.  
  1499.         where:  name    represents the symbolic name of the program sec-
  1500.                         tion.   This  name  may  be  the  same  as   any
  1501.                         user-defined  symbol  as  the area names are in-
  1502.                         dependent of all symbols and labels.  
  1503.  
  1504.                 options specify the type of program or data area:  
  1505.                         ABS     absolute (automatically invokes OVR) 
  1506.                         REL     relocatable 
  1507.                         OVR     overlay 
  1508.                         CON     concatenate 
  1509.                         PAG     paged area 
  1510.  
  1511.  
  1512.            The .area directive provides a means of defining and separat-
  1513.         ing multiple programming and data sections.   The  name  is  the
  1514.         area  label used by the assembler and the linker to collect code
  1515.         from various separately assembled modules into one section.  The
  1516.         name may be from 1 to 8 characters in length.  
  1517.  
  1518.            The options are specified within parenthesis and separated by
  1519.         commas as shown in the following example:  
  1520.  
  1521.                 .area  TEST  (REL,CON)  ;This section is relocatable
  1522.                                         ;and concatenated with other
  1523.                                         ;sections of this program area.
  1524.         
  1525.                 .area  DATA  (REL,OVR)  ;This section is relocatable
  1526.                                         ;and overlays other sections
  1527.                                         ;of this program area.
  1528.         
  1529.                 .area  SYS   (ABS,OVR)  ;(CON not allowed with ABS)
  1530.                                         ;This section is defined as
  1531.                                         ;absolute. Absolute sections
  1532.                                         ;are always overlayed with
  1533.                                         ;other sections of this program
  1534.                                         ;area.
  1535.         
  1536.                 .area  PAGE  (PAG)      ;This is a paged section. The
  1537.                                         ;section must be on a 256 byte
  1538.                                         ;boundary and its length is
  1539.                                         ;checked by the linker to be
  1540.                                         ;no larger than 256 bytes.
  1541.                                         ;This is useful for direct page
  1542.                                         ;areas.
  1543.  
  1544.  
  1545.  
  1546.         THE ASSEMBLER                                          PAGE 1-22
  1547.         GENERAL ASSEMBLER DIRECTIVES
  1548.  
  1549.  
  1550.            The  default  area type is REL|CON;  i.e.  a relocatable sec-
  1551.         tion which is concatenated with other sections of code with  the
  1552.         same area name.  The ABS option indicates an absolute area.  The
  1553.         OVR and CON options indicate if program  sections  of  the  same
  1554.         name  will overlay each other (start at the same location) or be
  1555.         concatenated with each other (appended to each other).  
  1556.  
  1557.            Multiple  invocations  of  the  .area directive with the same
  1558.         name must specify the same options or leave  the  options  field
  1559.         blank,  this  defaults  to  the previously specified options for
  1560.         this program area.  
  1561.         The   ASxxxx   assemblers   automatically  provide  two  program
  1562.         sections:  
  1563.  
  1564.                 '.  .ABS.'      This dumby section contains all absolute
  1565.                                 symbols and their values.  
  1566.  
  1567.                 '_CODE'         This  is  the default program/data area.
  1568.                                 This program area is of type (REL,CON). 
  1569.         The  ASxxxx  assemblers  also automatically generate two symbols
  1570.         for each program area:  
  1571.  
  1572.                 's_<area>'      This is the starting address of the pro-
  1573.                                 gram area.  
  1574.  
  1575.                                 indent  -16  'l_<area>'      This is the
  1576.                                 length of the program area.  
  1577.  
  1578.  
  1579.         1.4.15  .org Directive 
  1580.  
  1581.         Format:  
  1582.  
  1583.                 .org    exp 
  1584.  
  1585.         where:  exp     is  an absolute expression that becomes the cur-
  1586.                         rent location counter.  
  1587.  
  1588.         The  .org directive is valid only in an absolute program section
  1589.         and will give a (q) error if used in a relocatable program area.
  1590.         The  .org  directive specifies that the current location counter
  1591.         is to become the specified absolute value.  
  1592.  
  1593.  
  1594.  
  1595.  
  1596.         THE ASSEMBLER                                          PAGE 1-23
  1597.         GENERAL ASSEMBLER DIRECTIVES
  1598.  
  1599.  
  1600.         1.4.16  .globl Directive 
  1601.  
  1602.         Format:  
  1603.  
  1604.                 .globl  sym1,sym2,...,symn 
  1605.  
  1606.         where:  sym1,           represent legal symbolic names. When
  1607.                 sym2,...        When multiple symbols are specified,
  1608.                 symn            they are separated by commas.
  1609.  
  1610.            A  .globl directive may also have a label field and/or a com-
  1611.         ment field.  
  1612.  
  1613.            The  .globl directive is provided to define (and thus provide
  1614.         linkage to) symbols not  otherwise  defined  as  global  symbols
  1615.         within  a  module.   In  defining  global  symbols the directive
  1616.         .globl J is similar to:  
  1617.  
  1618.               J == expression or J::  
  1619.  
  1620.            Because  object  modules  are linked by global symbols, these
  1621.         symbols are vital to a program.  All internal symbols  appearing
  1622.         within  a  given program must be defined at the end of pass 1 or
  1623.         they will be considered undefined.  The assembly directive  (-g)
  1624.         can  be  be  invoked to make all undefined symbols global at the
  1625.         end of pass 1.  
  1626.  
  1627.  
  1628.         1.4.17  .if, .else, and .endif Directives 
  1629.  
  1630.         Format:  
  1631.  
  1632.                 .if     expr
  1633.                 .                       ;}
  1634.                 .                       ;} range of true condition
  1635.                 .                       ;}
  1636.                 .else
  1637.                 .                       ;}
  1638.                 .                       ;} range of false condition
  1639.                 .                       ;}
  1640.                 .endif
  1641.  
  1642.            The  conditional  assembly directives allow you to include or
  1643.         exclude blocks of source code during the assembly process, based
  1644.         on the evaluation of the condition test.  
  1645.  
  1646.            The  range of true condition will be processed if the expres-
  1647.         sion 'expr' is not zero (i.e.  true) and the range of false con-
  1648.         dition  will  be processed if the expression 'expr' is zero (i.e
  1649.         false).  The range of true condition is optional as is the .else
  1650.         directive  and  the range of false condition.  The following are
  1651.         all valid .if/.else/.endif constructions:  
  1652.  
  1653.  
  1654.         THE ASSEMBLER                                          PAGE 1-24
  1655.         GENERAL ASSEMBLER DIRECTIVES
  1656.  
  1657.  
  1658.  
  1659.                 .if     A-4             ;evaluate A-4
  1660.                 .byte   1,2             ;insert bytes if A-4 is
  1661.                 .endif                  ;not zero
  1662.         
  1663.                 .if     K+3             ;evaluate K+3
  1664.                 .else
  1665.                 .byte   3,4             ;insert bytes if K+3
  1666.                 .endif                  ;is zero
  1667.         
  1668.                 .if     J&3             ;evaluate J masked by 3
  1669.                 .byte   12              ;insert this byte if J&3
  1670.                 .else                   ;is not zero
  1671.                 .byte   13              ;insert this byte if J&3
  1672.                 .endif                  ;is zero
  1673.  
  1674.  
  1675.         The .if/.else/.endif directives may be nested upto 10 levels.  
  1676.  
  1677.            The  .page  directive  is  processed within a false condition
  1678.         range to allow extended textual information to  be  incorporated
  1679.         in  the  source  program  with  out  the need to use the comment
  1680.         delimiter (;):  
  1681.  
  1682.                 .if     0
  1683.         
  1684.                 .page
  1685.                 This text will be bypassed during assembly
  1686.                 but appear in the listing file.
  1687.                 .
  1688.                 .
  1689.                 .
  1690.         
  1691.                 .endif
  1692.  
  1693.  
  1694.         1.4.18  .include Directive 
  1695.  
  1696.         Format:  
  1697.  
  1698.                 .include        string 
  1699.  
  1700.         where:  string  represents  a  delimited string that is the file
  1701.                         specification of an ASxxxx source file.  
  1702.  
  1703.            The .include directive is used to insert a source file within
  1704.         the source file currently being assembled.  When this  directive
  1705.         is encountered, an implicit .page directive is issued.  When the
  1706.         end of the specified source file is reached, an  implicit  .page
  1707.         directive is issued and input continues from the previous source
  1708.         file.  The maximum nesting level of source files specified by  a
  1709.         .include directive is five.  
  1710.  
  1711.  
  1712.         THE ASSEMBLER                                          PAGE 1-25
  1713.         GENERAL ASSEMBLER DIRECTIVES
  1714.  
  1715.  
  1716.            The  total  number  of separately specified .include files is
  1717.         unlimited as each .include file is opened and then closed during
  1718.         each pass made by the assembler.  
  1719.  
  1720.  
  1721.         1.4.19  .setdp Directive 
  1722.  
  1723.         Format:  
  1724.  
  1725.                 .setdp [base [,area]] 
  1726.  
  1727.         The  set  direct  page  directive has a common format in all the
  1728.         AS68xx assemblers.  The .setdp directive is used to  inform  the
  1729.         assembler  of  the current direct page region and the offset ad-
  1730.         dress within the selected area.  The normal  invocation  methods
  1731.         are:  
  1732.  
  1733.                 .area   DIRECT  (PAG)
  1734.                 .setdp
  1735.         
  1736.                 or
  1737.         
  1738.                 .setdp  0,DIRECT
  1739.  
  1740.         for  all  the  68xx microprocessors (the 6804 has only the paged
  1741.         ram area).  The commands specify that the direct page is in area
  1742.         DIRECT and its offset address is 0 (the only valid value for all
  1743.         but the 6809 microprocessor).  Be sure to place the DIRECT  area
  1744.         at address 0 during linking.  When the base address and area are
  1745.         not specified, then zero and the current area are the  defaults.
  1746.         If  a  .setdp directive is not issued the assembler defaults the
  1747.         direct page to the area "_CODE" at offset 0.  
  1748.  
  1749.            The  assembler  verifies  that  any  local variable used in a
  1750.         direct variable reference is located in this area.  Local  vari-
  1751.         able  and  constant value direct access addresses are checked to
  1752.         be within the address range from 0 to 255.  
  1753.  
  1754.            External direct references are assumed by the assembler to be
  1755.         in the correct area and have valid  offsets.   The  linker  will
  1756.         check all direct page relocations to verify that they are within
  1757.         the correct area.  
  1758.  
  1759.            The  6809  microprocessor  allows the selection of the direct
  1760.         page to be on any 256 byte boundary by loading  the  appropriate
  1761.         value  into the dp register.  Typically one would like to select
  1762.         the page boundary at link time, one method follows:  
  1763.  
  1764.  
  1765.         THE ASSEMBLER                                          PAGE 1-26
  1766.         GENERAL ASSEMBLER DIRECTIVES
  1767.  
  1768.  
  1769.                 .area   DIRECT  (PAG)   ; define the direct page
  1770.                 .setdp
  1771.                 .
  1772.                 .
  1773.                 .
  1774.                 .area   PROGRAM
  1775.                 .
  1776.                 ldd     #DIRECT         ; load the direct page register
  1777.                 tfr     a,dp            ; for access to the direct page
  1778.  
  1779.         At  link  time specify the base and global equates to locate the
  1780.         direct page:  
  1781.  
  1782.                 -b DIRECT = 0x1000
  1783.                 -g DIRECT = 0x1000
  1784.  
  1785.         Both  the  area address and offset value must be specified (area
  1786.         and variable names are independent).   The  linker  will  verify
  1787.         that  the  relocated  direct page accesses are within the direct
  1788.         page.  
  1789.         The  preceeding  sequence  could  be repeated for multiple paged
  1790.         areas, however an alternate method is to define a non-paged area
  1791.         and use the .setdp directive to specify the offset value:  
  1792.  
  1793.                 .area   DIRECT          ; define non-paged area
  1794.                 .
  1795.                 .
  1796.                 .
  1797.                 .area   PROGRAM
  1798.                 .
  1799.                 .setdp  0,DIRECT        ; direct page area
  1800.                 ldd     #DIRECT         ; load the direct page register
  1801.                 tfr     a,dp            ; for access to the direct page
  1802.                 .
  1803.                 .
  1804.                 .setdp  0x100,DIRECT    ; direct page area
  1805.                 ldd     #DIRECT+0x100   ; load the direct page register
  1806.                 tfr     a,dp            ; for access to the direct page
  1807.  
  1808.         The  linker  will  verify that subsequent direct page references
  1809.         are in the specified area and offset address range.  It  is  the
  1810.         programmers responsibility to load the dp register with the cor-
  1811.         rect page segment  corresponding  to  the  .setdp  base  address
  1812.         specified.  
  1813.  
  1814.            For  those  cases  where a single piece of code must access a
  1815.         defined data structure within a direct page and there  are  many
  1816.         pages,  define  a  dumby  direct page linked at address 0.  This
  1817.         dumby page is used only to define  the  variable  labels.   Then
  1818.         load  the dp register with the real base address but donot use a
  1819.         .setdp  directive.   This  method  is  equivalent   to   indexed
  1820.  
  1821.  
  1822.         THE ASSEMBLER                                          PAGE 1-27
  1823.         GENERAL ASSEMBLER DIRECTIVES
  1824.  
  1825.  
  1826.         addressing,  where the dp register is the index register and the
  1827.         direct addressing is the offset.  
  1828.  
  1829.  
  1830.         1.5  INVOKING ASXXXX 
  1831.  
  1832.  
  1833.            The  ASxxxx assemblers are command line oriented.  The PC as-
  1834.         semblers are started with the appropriate option(s) and  file(s)
  1835.         to assemble following the assembler name:  
  1836.  
  1837.         as6809 [-dqxgalosff] file1 [file2 file3 ...  file6] 
  1838.  
  1839.         The options are:  
  1840.  
  1841.                 d       decimal listing
  1842.                 q       octal   listing
  1843.                 x       hex     listing (default)
  1844.         
  1845.                         The listing radix affects the
  1846.                         .lst, .rel, and .sym files.
  1847.         
  1848.                 g       undefined symbols made global
  1849.                 a       all user symbols made global
  1850.         
  1851.                 l       create list   output file1.lst
  1852.                 o       create object output file1.rel
  1853.                 s       create symbol output file1.sym
  1854.         
  1855.                 p       disable listing pagination
  1856.         
  1857.                         relocatable reference flagging:
  1858.         
  1859.                 f       by  `   in the listing file
  1860.                 ff      by mode in the listing file
  1861.  
  1862.            The file name for the .lst, .rel, and .sym files is the first
  1863.         file name specified in the command line.  All output  files  are
  1864.         ascii  text  files which may be edited, copied, etc.  The output
  1865.         files are the concatenation of all the input files, if files are
  1866.         to  be  assembled  independently  invoke  the assembler for each
  1867.         file.  
  1868.  
  1869.            The  .rel  file contains a radix directive so that the linker
  1870.         will use the proper conversion for this file.  Linked files  may
  1871.         have different radices.  
  1872.  
  1873.            If  the list (l) option is specified without the symbol table
  1874.         (s) option, the symbol table is placed at the end of the listing
  1875.         file.  
  1876.  
  1877.  
  1878.  
  1879.  
  1880.         THE ASSEMBLER                                          PAGE 1-28
  1881.         ERRORS
  1882.  
  1883.  
  1884.         1.6  ERRORS 
  1885.  
  1886.  
  1887.            The  ASxxxx assemblers provide limited diagnostic error codes
  1888.         during the assembly process, these errors will be noted  in  the
  1889.         listing file and printed on the stderr device.  
  1890.  
  1891.            The assembler reports the errors on the stderr device as 
  1892.  
  1893.                 ?ASxxxx-Error-<*> in line nnn of filename
  1894.  
  1895.         where  * is the error code, nnn is the line number, and filename
  1896.         is the source/include file.  
  1897.  
  1898.            The errors are:  
  1899.  
  1900.               (.)   This  error  is caused by an absolute direct assign-
  1901.                     ment of the current location counter 
  1902.                           . = expression (incorrect) 
  1903.                     rather than the correct 
  1904.                           . = . + expression 
  1905.  
  1906.               (a)   Indicates  a machine specific addressing or address-
  1907.                     ing mode error.  
  1908.  
  1909.               (b)   Indicates a direct page boundary error.  
  1910.  
  1911.               (d)   Indicates a direct page addressing error.  
  1912.  
  1913.               (i)   Caused  by  an  .include file error or an .if/.endif
  1914.                     mismatch.  
  1915.  
  1916.               (m)   Multiple  definitions  of  the  same label, multiple
  1917.                     .module directives, or multiple  conflicting  attri-
  1918.                     butes in an .area directive.  
  1919.  
  1920.               (o)   Directive  or  mnemonic error or the use of the .org
  1921.                     directive in a relocatable area.  
  1922.  
  1923.               (p)   Phase error:  label location changing between passes
  1924.                     2 and 3.  Normally caused by having  more  than  one
  1925.                     level of forward referencing.  
  1926.  
  1927.               (q)   Questionable syntax:  missing or improper operators,
  1928.                     terminators, or delimiters.  
  1929.  
  1930.               (r)   Relocation  error:   logic  operation attempted on a
  1931.                     relocatable term, addition of two relocatable terms,
  1932.                     subtraction  of two relocatable terms not within the
  1933.                     same programming area or external symbols.  
  1934.  
  1935.               (u)   Undefined symbol encountered during assembly.  
  1936.  
  1937.  
  1938.         THE ASSEMBLER                                          PAGE 1-29
  1939.         LISTING FILE
  1940.  
  1941.  
  1942.         1.7  LISTING FILE 
  1943.  
  1944.  
  1945.            The  (-l) option produces an ascii output listing file.  Each
  1946.         page of output contains a four line header:  
  1947.  
  1948.  
  1949.              1.  The ASxxxx program name and page number 
  1950.  
  1951.              2.  Title from a .title directive (if any) 
  1952.  
  1953.              3.  Subtitle from a .sbttl directive (if any) 
  1954.  
  1955.              4.  Blank line 
  1956.  
  1957.  
  1958.  
  1959.         Each succeeding line contains five fields:  
  1960.  
  1961.  
  1962.              1.  Error field (first three characters of line) 
  1963.  
  1964.              2.  Current location counter 
  1965.  
  1966.              3.  Generated code in byte format 
  1967.  
  1968.              4.  Source text line number 
  1969.  
  1970.              5.  Source text 
  1971.  
  1972.  
  1973.            The error field may contain upto 2 error flags indicating any
  1974.         errors encountered while assembling this line of source code.  
  1975.  
  1976.            The  current  location counter field displays the 16-bit pro-
  1977.         gram position.  This field will be in the selected radix.  
  1978.  
  1979.            The generated code follows the program location.  The listing
  1980.         radix determines the number of bytes that will be  displayed  in
  1981.         this field.  Hexidecimal listing allows six bytes of data within
  1982.         the field, decimal and octal allow four bytes within the  field.
  1983.         If more than one field of data is generated from the assembly of
  1984.         a single line of source code, then the data field is repeated on
  1985.         successive lines.  
  1986.  
  1987.            The source text line number is printed in decimal and is fol-
  1988.         lowed by the source text.  
  1989.  
  1990.            Two  special  cases  will  disable  the  listing of a line of
  1991.         source text:  
  1992.  
  1993.  
  1994.  
  1995.         THE ASSEMBLER                                          PAGE 1-30
  1996.         LISTING FILE
  1997.  
  1998.  
  1999.              1.  Source line with a .page directive is never listed.  
  2000.  
  2001.              2.  Source  line  with  a  .include  file  directive is not
  2002.                  listed unless the .include file cannot be opened.  
  2003.  
  2004.  
  2005.            Two  data  field  options  are  available to flag those bytes
  2006.         which will be relocated by the linker.   If  the  -f  option  is
  2007.         specified  then  each  byte to be relocated will be preceeded by
  2008.         the '`' character.  If the -ff option  is  specified  then  each
  2009.         byte  to  be relocated will be preceeded by one of the following
  2010.         characters:  
  2011.  
  2012.              1.  *   paged relocation 
  2013.  
  2014.              2.  u   low  byte of unsigned word or unsigned byte 
  2015.  
  2016.              3.  v   high byte of unsigned word 
  2017.  
  2018.              4.  p   PCR low  byte of word relocation or PCR byte 
  2019.  
  2020.              5.  q   PCR high byte of word relocation 
  2021.  
  2022.              6.  r   low  byte relocation or byte relocation 
  2023.  
  2024.              7.  s   high byte relocation 
  2025.  
  2026.  
  2027.  
  2028.         1.8  SYMBOL TABLE FILE 
  2029.  
  2030.  
  2031.            The symbol table has two parts:  
  2032.  
  2033.              1.  The alphabetically sorted list of symbols and/or labels
  2034.                  defined or referenced in the source program.  
  2035.  
  2036.              2.  A  list of the program areas defined during assembly of
  2037.                  the source program.  
  2038.  
  2039.  
  2040.            The sorted list of symbols and/or labels contains the follow-
  2041.         ing information:  
  2042.  
  2043.              1.  Program  area  number (none if absolute value or exter-
  2044.                  nal) 
  2045.  
  2046.              2.  The symbol or label 
  2047.  
  2048.              3.  Directly assigned symbol is denoted with an (=) sign 
  2049.  
  2050.  
  2051.  
  2052.         THE ASSEMBLER                                          PAGE 1-31
  2053.         SYMBOL TABLE FILE
  2054.  
  2055.  
  2056.              4.  The  value of a symbol, location of a label relative to
  2057.                  the program area base address (=0), or a ****  indicat-
  2058.                  ing the symbol or label is undefined.  
  2059.  
  2060.              5.  The  characters:   G - global, R - relocatable, and X -
  2061.                  external.  
  2062.  
  2063.  
  2064.            The list of program areas provides the correspondence between
  2065.         the program area numbers and the defined program areas, the size
  2066.         of the program areas, and the area flags (attributes).  
  2067.  
  2068.  
  2069.         1.9  OBJECT FILE 
  2070.  
  2071.  
  2072.            The  object  file is an ascii file containing the information
  2073.         needed by the linker to bind multiple object modules into a com-
  2074.         plete  loadable  memory  image.   The object module contains the
  2075.         following designators:  
  2076.  
  2077.                 [XDQ][HL]
  2078.                         X       Hexidecimal radix
  2079.                         D       Decimal radix
  2080.                         Q       Octal radix
  2081.         
  2082.                         H       Most significant byte first
  2083.                         L       Least significant byte first
  2084.         
  2085.                 H       Header 
  2086.                 M       Module
  2087.                 A       Area
  2088.                 S       Symbol
  2089.                 T       Object code
  2090.                 R       Relocation information
  2091.                 P       Paging information
  2092.  
  2093.            Refer to the linker for a detailed description of each of the
  2094.         designators and the format of the information contained  in  the
  2095.         object file.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.                                     CHAPTER 2
  2111.  
  2112.                                    THE LINKER
  2113.  
  2114.  
  2115.  
  2116.  
  2117.  
  2118.         2.1  ASLINK RELOCATING LINKER 
  2119.  
  2120.  
  2121.            ASLINK is the companion linker for the ASxxxx assemblers.  
  2122.  
  2123.            The  program ASLINK is a general relocating linker performing
  2124.         the following functions:  
  2125.  
  2126.              1.  Bind multiple object modules into a single memory image 
  2127.  
  2128.              2.  Resolve inter-module symbol references 
  2129.  
  2130.              3.  Combine  code  belonging to the same area from multiple
  2131.                  object files into a single contiguous memory region 
  2132.  
  2133.              4.  Search and import object module libraries for undefined
  2134.                  global variables 
  2135.  
  2136.              5.  Perform   byte   and   word  program  counter  relative
  2137.                  (pc or pcr) addressing calculations 
  2138.  
  2139.              6.  Define absolute symbol values at link time 
  2140.  
  2141.              7.  Define absolute area base address values at link time 
  2142.  
  2143.              8.  Produce Intel Hex or Motorola S19 output file 
  2144.  
  2145.              9.  Produce a map of the linked memory image 
  2146.  
  2147.             10.  Produce  an updated listing file with the relocated ad-
  2148.                  dresses and data 
  2149.  
  2150.  
  2151.  
  2152.  
  2153.  
  2154.         THE LINKER                                              PAGE 2-2
  2155.         INVOKING ASLINK
  2156.  
  2157.  
  2158.         2.2  INVOKING ASLINK 
  2159.  
  2160.  
  2161.            The  linker  may run in the command line mode or command file
  2162.         modes.  The allowed startup linker commands are:  
  2163.  
  2164.         -c/-f           command line / command file modes 
  2165.  
  2166.         -p/-n           enable/disable echo file.lnk input to stdout 
  2167.  
  2168.            If  command  line  mode is selected, all linker commands come
  2169.         from stdin, if the command file mode is  selected  the  commands
  2170.         are input from the specified file (extension must be .lnk).  
  2171.  
  2172.            The linker is started via 
  2173.  
  2174.                 ASLINK  -(cfpn) 
  2175.  
  2176.         After invoking the linker the valid options are:  
  2177.  
  2178.              1.  -i/-s   Intel Hex (file.ihx) or Motorola S19 (file.s19)
  2179.                  image output file.  
  2180.  
  2181.              2.  -m      Generate a map file (file.map).  This file con-
  2182.                  tains a list of the symbols (by area) with absolute ad-
  2183.                  dresses,  sizes  of  linked  areas,  and  other linking
  2184.                  information.  
  2185.  
  2186.              3.  -u      Generate  an  updated  listing  file (file.rst)
  2187.                  derived from the relocated addresses and data from  the
  2188.                  linker 
  2189.  
  2190.              4.  -xdq    Specifies  the  number  radix  for the map file
  2191.                  (Hexidecimal, Decimal, or Octal).  
  2192.  
  2193.              5.  fileN   Files  to  be linked.  Files may be on the same
  2194.                  line as the above options or on a separate line(s)  one
  2195.                  file  per line or multiple files separated by spaces or
  2196.                  tabs.  
  2197.  
  2198.              6.  -b  area = expression (one definition per line) 
  2199.                  This  specifies  an area base address where the expres-
  2200.                  sion may contain constants and/or defined symbols  from
  2201.                  the linked files.  
  2202.  
  2203.              7.  -g  symbol = expression (one definition per line) 
  2204.                  This  specifies  the value for the symbol where the ex-
  2205.                  pression may contain constants and/or  defined  symbols
  2206.                  from the linked files.  
  2207.  
  2208.              8.  -k  library directory path 
  2209.                  (one  definition  per line) This specifies one possible
  2210.  
  2211.  
  2212.         THE LINKER                                              PAGE 2-3
  2213.         INVOKING ASLINK
  2214.  
  2215.  
  2216.                  path to an object library.  More than one path  is  al-
  2217.                  lowed.  
  2218.  
  2219.              9.  -l  library file specification 
  2220.                  (one  definition  per  line)  This specifies a possible
  2221.                  library file.  More than one file is allowed.  
  2222.  
  2223.             10.  -e      or null line, terminates input to the linker.  
  2224.  
  2225.  
  2226.  
  2227.         2.3  LIBRARY PATH(S) AND FILE(S) 
  2228.  
  2229.  
  2230.            The process of resolving undefined symbols after scanning the
  2231.         input object  files  includes  the  scanning  of  object  module
  2232.         libraries.   The  linker will search through all combinations of
  2233.         the library path specifications (input by the -k option) and the
  2234.         library  file  specifications (input by the -l option) that lead
  2235.         to an existing library file.  Each library file contains a  list
  2236.         (one  file  per  line)  of  modules  included in this particular
  2237.         library.  Each existing object module is scanned for a match  to
  2238.         the undefined symbol.  The first module containing the symbol is
  2239.         then linked with the previous modules to resolve the symbol  de-
  2240.         finition.   The  library  object  modules are rescanned until no
  2241.         more symbols can be resolved.   The  scanning  algorithm  allows
  2242.         resolution  of  back references.  No errors are reported for non
  2243.         existant library files or object modules.  
  2244.  
  2245.            The  library  file  specification may be formed in one of two
  2246.         ways:  
  2247.  
  2248.              1.  If  the  library  file  contained an absolute path/file
  2249.                  specification  then  this  is   the   object   module's
  2250.                  path/file.  
  2251.                  (i.e.  C:\...) 
  2252.  
  2253.              2.  If  the  library  file  contains  a  relative path/file
  2254.                  specification then the concatenation of  the  path  and
  2255.                  this  file  specification  becomes  the object module's
  2256.                  path/file.  
  2257.                  (i.e.  \...) 
  2258.  
  2259.  
  2260.            As  an example, assume there exists a library file termio.lib
  2261.         in the syslib directory specifying the following object modules: 
  2262.  
  2263.         \6809\io_disk        first object module 
  2264.         d:\special\io_comm   second object module 
  2265.  
  2266.         and the following parameters were specified to the linker:  
  2267.  
  2268.  
  2269.  
  2270.         THE LINKER                                              PAGE 2-4
  2271.         LIBRARY PATH(S) AND FILE(S)
  2272.  
  2273.  
  2274.         -k c:\iosystem\    the first path 
  2275.         -k c:\syslib\      the second path 
  2276.  
  2277.         -l termio          the first library file 
  2278.         -l io              the second library file (no such file) 
  2279.  
  2280.         The  linker  will attempt to use the following object modules to
  2281.         resolve any undefined symbols:  
  2282.  
  2283.         c:\syslib\6809\io_disk.rel     (concatenated path/file) 
  2284.         d:\special\io_comm.rel         (absolute path/file) 
  2285.  
  2286.         all  other path(s)/file(s) don't exist.  (No errors are reported
  2287.         for non existant path(s)/file(s).) 
  2288.  
  2289.  
  2290.         2.4  ASLINK PROCESSING 
  2291.  
  2292.  
  2293.            The  linker  processes  the  files  in  the  order  they  are
  2294.         presented.  The first pass through the input files  is  used  to
  2295.         define  all  program  areas, the section area sizes, and symbols
  2296.         defined or referenced.  Undefined symbols will initiate a search
  2297.         of any specified library file(s) and the importing of the module
  2298.         containing the symbol definition.  After the first pass  the  -b
  2299.         (area  base  address) definitions, if any, are processed and the
  2300.         areas linked.  
  2301.  
  2302.            The  area  linking proceeds by first examining the area types
  2303.         ABS, CON, REL, OVR and PAG.  Absolute areas (ABS) from  separate
  2304.         object modules are always overlayed and have been assembled at a
  2305.         specific address, these are not normally relocated (if a -b com-
  2306.         mand  is  used  on an absolute area the area will be relocated).
  2307.         Relative areas (normally defined as REL|CON) have a base address
  2308.         of  0x0000  as read from the object files, the -b command speci-
  2309.         fies the beginning address of the area.  All subsequent relative
  2310.         areas  will  be  concatenated  with  proceeding  relative areas.
  2311.         Where specific ordering is desired, the first linker input  file
  2312.         should  have  the area definitions in the desired order.  At the
  2313.         completion of the area linking all area  addresses  and  lengths
  2314.         have  been determined.  The areas of type PAG are verified to be
  2315.         on a 256 byte boundary and that the length does not  exceed  256
  2316.         bytes.  Any errors are noted on stderr and in the map file.  
  2317.  
  2318.            Next  the  global symbol definitions (-g option), if any, are
  2319.         processed.  The symbol definitions have been delayed until  this
  2320.         point because the absolute addresses of all internal symbols are
  2321.         known and can be used in the expression calculations.  
  2322.  
  2323.            Before  continuing  with the linking process the symbol table
  2324.         is scanned to determine if any symbols have been referenced  but
  2325.         not defined.  Undefined symbols are listed on the stderr device.
  2326.  
  2327.  
  2328.         THE LINKER                                              PAGE 2-5
  2329.         ASLINK PROCESSING
  2330.  
  2331.  
  2332.         if a .module directive was included in the  assembled  file  the
  2333.         module  making  the reference to this undefined variable will be
  2334.         printed.  
  2335.  
  2336.            Constants  defined  as global in more than one module will be
  2337.         flagged as multiple definitions if their values are not  identi-
  2338.         cal.  
  2339.  
  2340.            After  the  preceeding  processes are complete the linker may
  2341.         output a map file (-m option).  This file provides the following
  2342.         information:  
  2343.  
  2344.              1.  Global symbol values and label absolute addresses 
  2345.  
  2346.              2.  Defined areas and there lengths 
  2347.  
  2348.              3.  Remaining undefined symbols 
  2349.  
  2350.              4.  List of modules linked 
  2351.  
  2352.              5.  List of library modules linked 
  2353.  
  2354.              6.  List of -b and -g definitions 
  2355.  
  2356.  
  2357.  
  2358.  
  2359.            The final step of the linking process is performed during the
  2360.         second pass of the input files.  As the xxx.rel files  are  read
  2361.         the code is relocated by substituting the physical addresses for
  2362.         the referenced symbols and areas and may be output in  Intel  or
  2363.         Motorola  formats.   The  number of files linked and symbols de-
  2364.         fined/referenced is limited by the processor space available  to
  2365.         build the area/symbol lists.  If the -u option is specified then
  2366.         the listing files  (file.lst)  associated  with  the  relocation
  2367.         files  (file.rel)  are  scanned  and  used  to create a new file
  2368.         (file.rst) which has all addresses and data relocated  to  their
  2369.         final values.  
  2370.  
  2371.  
  2372.         2.5  LINKER INPUT FORMAT 
  2373.  
  2374.  
  2375.            The  linkers'  input  object file is an ascii file containing
  2376.         the information needed by the linker  to  bind  multiple  object
  2377.         modules into a complete loadable memory image.  
  2378.  
  2379.         The object module contains the following designators:  
  2380.  
  2381.                 [XDQ][HL]
  2382.                         X       Hexidecimal radix
  2383.                         D       Decimal radix
  2384.  
  2385.  
  2386.         THE LINKER                                              PAGE 2-6
  2387.         LINKER INPUT FORMAT
  2388.  
  2389.  
  2390.                         Q       Octal radix
  2391.         
  2392.                         H       Most significant byte first
  2393.                         L       Least significant byte first
  2394.         
  2395.                 H       Header 
  2396.                 M       Module
  2397.                 A       Area
  2398.                 S       Symbol
  2399.                 T       Object code
  2400.                 R       Relocation information
  2401.                 P       Paging information
  2402.  
  2403.  
  2404.         2.5.1  Object Module Format 
  2405.  
  2406.  
  2407.            The  first  line  of  an object module contains the [XDQ][HL]
  2408.         format specifier (i.e.  XH indicates  a  hexidecimal  file  with
  2409.         most significant byte first) for the following designators.  
  2410.  
  2411.  
  2412.         2.5.2  Header Line 
  2413.  
  2414.                 H aa areas gg global symbols 
  2415.  
  2416.            The  header  line  specifies  the number of areas(aa) and the
  2417.         number of global symbols(gg) defined or referenced in  this  ob-
  2418.         ject module segment.  
  2419.  
  2420.  
  2421.         2.5.3  Module Line 
  2422.  
  2423.                 M name 
  2424.  
  2425.            The  module  line  specifies  the module name from which this
  2426.         header segment was assembled.  The module line will  not  appear
  2427.         if the .module directive was not used in the source program.  
  2428.  
  2429.  
  2430.         2.5.4  Symbol Line 
  2431.  
  2432.                 S string Defnnnn 
  2433.  
  2434.                         or 
  2435.  
  2436.                 S string Refnnnn 
  2437.  
  2438.            The  symbol line defines (Def) or references (Ref) the symbol
  2439.         'string' with the value nnnn.  The defined value is relative  to
  2440.         the  current  area  base  address.   References to constants and
  2441.         external global symbols will always appear before the first area
  2442.  
  2443.  
  2444.         THE LINKER                                              PAGE 2-7
  2445.         LINKER INPUT FORMAT
  2446.  
  2447.  
  2448.         definition.  References to external symbols will have a value of
  2449.         zero.  
  2450.  
  2451.  
  2452.         2.5.5  Area Line 
  2453.  
  2454.                 A label size ss flags ff 
  2455.  
  2456.            The  area  line  defines the area label, the size (ss) of the
  2457.         area in bytes, and the area flags (ff).  The area flags  specify
  2458.         the ABS, REL, CON, OVR, and PAG parameters:  
  2459.  
  2460.                 OVR/CON  (0x04/0x00 i.e.  bit position 2) 
  2461.  
  2462.                 ABS/REL  (0x08/0x00 i.e.  bit position 3) 
  2463.  
  2464.                 PAG      (0x10 i.e.  bit position 4) 
  2465.  
  2466.  
  2467.         2.5.6  T Line 
  2468.  
  2469.                 T xx xx nn nn nn nn nn ...  
  2470.  
  2471.            The  T  line contains the assembled code output by the assem-
  2472.         bler with xx xx being the offset address from the  current  area
  2473.         base address and nn being the assembled instructions and data in
  2474.         byte format.  
  2475.  
  2476.  
  2477.         2.5.7  R Line 
  2478.  
  2479.                 R 0 0 nn nn n1 n2 xx xx ...  
  2480.  
  2481.            The R line provides the relocation information to the linker.
  2482.         The nn nn value is the current area index, i.e.  which area  the
  2483.         current  values  were  assembled.  Relocation information is en-
  2484.         coded in groups of 4 bytes:  
  2485.  
  2486.              1.  n1 is the relocation mode and object format 
  2487.                  1.  bit 0 word(0x00)/byte(0x01) 
  2488.                  2.  bit 1 relocatable area(0x00)/symbol(0x02) 
  2489.                  3.  bit 2 normal(0x00)/PC relative(0x04) relocation 
  2490.                  4.  bit  3  1-byte(0x00)/2-byte(0x08) object format for
  2491.                      byte data 
  2492.                  5.  bit 4 signed(0x00)/unsigned(0x10) byte data 
  2493.                  6.  bit 5 normal(0x00)/page '0'(0x20) reference 
  2494.                  7.  bit 6 normal(0x00)/page 'nnn'(0x40) reference 
  2495.                  8.  bit  7  LSB  byte(0x00)/MSB  byte(0x80) with 2-byte
  2496.                      mode 
  2497.  
  2498.              2.  n2  is  a byte index into the corresponding (i.e.  pre-
  2499.                  ceeding) T line data (i.e.  a pointer to the data to be
  2500.  
  2501.  
  2502.         THE LINKER                                              PAGE 2-8
  2503.         LINKER INPUT FORMAT
  2504.  
  2505.  
  2506.                  updated  by  the  relocation).   The T line data may be
  2507.                  1-byte or  2-byte  byte  data  format  or  2-byte  word
  2508.                  format.  
  2509.  
  2510.              3.  xx xx  is the area/symbol index for the area/symbol be-
  2511.                  ing referenced.  the corresponding area/symbol is found
  2512.                  in the header area/symbol lists.  
  2513.  
  2514.  
  2515.         The groups of 4 bytes are repeated for each item requiring relo-
  2516.         cation in the preceeding T line.  
  2517.  
  2518.  
  2519.         2.5.8  P Line 
  2520.  
  2521.                 P 0 0 nn nn n1 n2 xx xx 
  2522.  
  2523.            The  P  line provides the paging information to the linker as
  2524.         specified by a .setdp directive.  The format of  the  relocation
  2525.         information is identical to that of the R line.  The correspond-
  2526.         ing T line has the following information:  
  2527.                 T xx xx aa aa bb bb 
  2528.  
  2529.            Where  aa aa is the area reference number which specifies the
  2530.         selected page area and bb bb is the base address  of  the  page.
  2531.         bb bb will require relocation processing if the 'n1 n2 xx xx' is
  2532.         specified in the P line.  The linker will verify that  the  base
  2533.         address is on a 256 byte boundary and that the page length of an
  2534.         area defined with the PAG type is not larger than 256 bytes.  
  2535.  
  2536.            The  linker  defaults any direct page references to the first
  2537.         area defined in the input REL file.  All ASxxxx assemblers  will
  2538.         specify the _CODE area first, making this the default page area. 
  2539.  
  2540.  
  2541.         2.6  LINKER ERROR MESSAGES 
  2542.  
  2543.  
  2544.            The linker provides detailed error messages allowing the pro-
  2545.         grammer to quickly find the errant code.   As  the  linker  com-
  2546.         pletes  pass 1  over  the  input  file(s)  it  reports  any page
  2547.         boundary or page length errors as follows:  
  2548.  
  2549.         ?ASlink-Warning-Paged Area PAGE0 Boundary Error
  2550.         
  2551.         and/or
  2552.         
  2553.         ?ASlink-Warning-Paged Area PAGE0 Length Error
  2554.  
  2555.         where PAGE0 is the paged area.  
  2556.  
  2557.  
  2558.  
  2559.         THE LINKER                                              PAGE 2-9
  2560.         LINKER ERROR MESSAGES
  2561.  
  2562.  
  2563.            During  Pass  two the linker reads the T, R, and P lines per-
  2564.         forming the necessary relocations and  outputting  the  absolute
  2565.         code.  Various errors may be reported during this process 
  2566.         The P line processing can produce only one possible error:  
  2567.  
  2568.         ?ASlink-Warning-Page Definition Boundary Error
  2569.                  file        module      pgarea      pgoffset
  2570.           PgDef  t6809l      t6809l      PAGE0       0001
  2571.  
  2572.         The error message specifies the file and module where the .setdp
  2573.         direct was issued and indicates  the  page  area  and  the  page
  2574.         offset value determined after relocation.  
  2575.  
  2576.  
  2577.         The R line processing produces various errors:  
  2578.  
  2579.         ?ASlink-Warning-Byte PCR relocation error for symbol  bra2
  2580.                  file        module      area        offset
  2581.           Refby  t6809l      t6809l      TEST        00FE
  2582.           Defin  tconst      tconst      .  .ABS.    0080
  2583.  
  2584.         ?ASlink-Warning-Unsigned Byte error for symbol  two56
  2585.                  file        module      area        offset
  2586.           Refby  t6800l      t6800l      DIRECT      0015
  2587.           Defin  tconst      tconst      .  .ABS.    0100
  2588.  
  2589.         ?ASlink-Warning-Page0 relocation error for symbol  ltwo56
  2590.                  file        module      area        offset
  2591.           Refby  t6800l      t6800l      DIRECT      000D
  2592.           Defin  tconst      tconst      DIRECT      0100
  2593.  
  2594.         ?ASlink-Warning-Page Mode relocation error for symbol  two56
  2595.                  file        module      area        offset
  2596.           Refby  t6809l      t6809l      DIRECT      0005
  2597.           Defin  tconst      tconst      .  .ABS.    0100
  2598.  
  2599.         ?ASlink-Warning-Page Mode relocation error
  2600.                  file        module      area        offset
  2601.           Refby  t           Pagetest    PROGRAM     0006
  2602.           Defin  t           Pagetest    DIRECT      0100
  2603.  
  2604.         These  error messages specify the file, module, area, and offset
  2605.         within the area of the code  referencing  (Refby)  and  defining
  2606.         (Defin) the symbol.  If the symbol is defined in the same module
  2607.         as the reference the linker is unable to report the symbol name.
  2608.         The  assembler  listing file(s) should be examined at the offset
  2609.         from the specified area to located the offending code.  
  2610.  
  2611.            The errors are:  
  2612.  
  2613.              1.  The  byte PCR error is caused by exceeding the pc rela-
  2614.                  tive byte branch range.  
  2615.  
  2616.  
  2617.         THE LINKER                                             PAGE 2-10
  2618.         LINKER ERROR MESSAGES
  2619.  
  2620.  
  2621.              2.  The Unsigned byte error indicates an indexing value was
  2622.                  negative or larger than 255.  
  2623.  
  2624.              3.  The  Page0  error is generated if the direct page vari-
  2625.                  able is not in the page0 range of 0 to 255.  
  2626.  
  2627.              4.  The page mode error is generated if the direct variable
  2628.                  is not within the current direct page (6809).  
  2629.  
  2630.  
  2631.  
  2632.         THE LINKER                                             Page 2-11
  2633.         INTEL HEX OUTPUT FORMAT
  2634.  
  2635.  
  2636.         2.7  INTEL HEX OUTPUT FORMAT 
  2637.  
  2638.         Record Mark Field    -  This  field  signifies  the  start  of a
  2639.                                 record, and consists of an  ascii  colon
  2640.                                 (:).  
  2641.  
  2642.         Record Length Field  -  This   field   consists   of  two  ascii
  2643.                                 characters which indicate the number  of
  2644.                                 data   bytes   in   this   record.   The
  2645.                                 characters are the result of  converting
  2646.                                 the  number  of  bytes  in binary to two
  2647.                                 ascii characters, high digit first.   An
  2648.                                 End  of  File  record contains two ascii
  2649.                                 zeros in this field.  
  2650.  
  2651.         Load Address Field   -  This  field  consists  of the four ascii
  2652.                                 characters which result from  converting
  2653.                                 the  the  binary value of the address in
  2654.                                 which to begin loading this record.  The
  2655.                                 order is as follows:  
  2656.  
  2657.                                     High digit of high byte of address. 
  2658.                                     Low digit of high byte of address.  
  2659.                                     High digit of low byte of address.  
  2660.                                     Low digit of low byte of address.  
  2661.  
  2662.                                 In an End of File record this field con-
  2663.                                 sists of either four ascii zeros or  the
  2664.                                 program  entry  address.   Currently the
  2665.                                 entry address option is not supported.  
  2666.  
  2667.         Record Type Field    -  This  field  identifies the record type,
  2668.                                 which is either 0 for data records or  1
  2669.                                 for  an End of File record.  It consists
  2670.                                 of two ascii characters, with  the  high
  2671.                                 digit of the record type first, followed
  2672.                                 by the low digit of the record type.  
  2673.  
  2674.         Data Field           -  This  field consists of the actual data,
  2675.                                 converted to two ascii characters,  high
  2676.                                 digit first.  There are no data bytes in
  2677.                                 the End of File record.  
  2678.  
  2679.         Checksum Field       -  The  checksum  field is the 8 bit binary
  2680.                                 sum of the record length field, the load
  2681.                                 address  field,  the  record type field,
  2682.                                 and the data field.  This  sum  is  then
  2683.                                 negated  (2's  complement) and converted
  2684.                                 to  two  ascii  characters,  high  digit
  2685.                                 first.  
  2686.  
  2687.  
  2688.         THE LINKER                                             Page 2-12
  2689.         MOTOROLA S1-S9 OUTPUT FORMAT
  2690.  
  2691.  
  2692.         2.8  MOTORLA S1-S9 OUTPUT FORMAT 
  2693.  
  2694.         Record Type Field    -  This  field  signifies  the  start  of a
  2695.                                 record and  identifies  the  the  record
  2696.                                 type as follows:  
  2697.  
  2698.                                     Ascii S1 - Data Record 
  2699.                                     Ascii S9 - End of File Record 
  2700.  
  2701.         Record Length Field  -  This  field  specifies the record length
  2702.                                 which includes the  address,  data,  and
  2703.                                 checksum   fields.   The  8  bit  record
  2704.                                 length value is converted to  two  ascii
  2705.                                 characters, high digit first.  
  2706.  
  2707.         Load Address Field   -  This  field  consists  of the four ascii
  2708.                                 characters which result from  converting
  2709.                                 the  the  binary value of the address in
  2710.                                 which to begin loading this record.  The
  2711.                                 order is as follows:  
  2712.  
  2713.                                     High digit of high byte of address. 
  2714.                                     Low digit of high byte of address.  
  2715.                                     High digit of low byte of address.  
  2716.                                     Low digit of low byte of address.  
  2717.  
  2718.                                 In an End of File record this field con-
  2719.                                 sists of either four ascii zeros or  the
  2720.                                 program  entry  address.   Currently the
  2721.                                 entry address option is not supported.  
  2722.  
  2723.         Data Field           -  This  field consists of the actual data,
  2724.                                 converted to two ascii characters,  high
  2725.                                 digit first.  There are no data bytes in
  2726.                                 the End of File record.  
  2727.  
  2728.         Checksum Field       -  The  checksum  field is the 8 bit binary
  2729.                                 sum of the record length field, the load
  2730.                                 address field, and the data field.  This
  2731.                                 sum is then  complemented  (1's  comple-
  2732.                                 ment)   and   converted   to  two  ascii
  2733.                                 characters, high digit first.  
  2734.  
  2735.  
  2736.  
  2737.  
  2738.  
  2739.  
  2740.  
  2741.  
  2742.  
  2743.  
  2744.  
  2745.  
  2746.  
  2747.  
  2748.                                     CHAPTER 3
  2749.  
  2750.                            BUILDING ASXXXX AND ASLINK
  2751.  
  2752.  
  2753.  
  2754.  
  2755.            The assemblers and linker have been successfully compiled us-
  2756.         ing  the  DECUS C  (PDP-11)  compiler  (patch  level   9)   with
  2757.         RT-11/TSX+,  Eyring  Research  Institute,  Inc.   PDOS (680x0) C
  2758.         V5.4b compiler, and Symantec C/C++ V6.1/V7.2.  
  2759.  
  2760.            The  device  specific  header  file  (i.e.  m6800.h, m6801.h,
  2761.         etc.) contains the DECUS C 'BUILD' directives for  generating  a
  2762.         command  file to compile, assemble, and link the necessary files
  2763.         to prepare an executable image for a particular assembler.  
  2764.  
  2765.  
  2766.         3.1  BUILDING AN ASSEMBLER 
  2767.  
  2768.  
  2769.            The  building  of  a typical assembler (6809 for example) re-
  2770.         quires the following files:  
  2771.  
  2772.              1.  M6809.H 
  2773.              2.  M09EXT.C 
  2774.              3.  M09MCH.C 
  2775.              4.  M09ADR.C 
  2776.              5.  M09PST.C 
  2777.              6.  ASM.H 
  2778.              7.  ASMAIN.C 
  2779.              8.  ASLEX.C 
  2780.              9.  ASSYM.C 
  2781.             10.  ASSUBR.C 
  2782.             11.  ASEXPR.C 
  2783.             12.  ASDATA.C 
  2784.             13.  ASLIST.C 
  2785.             14.  ASOUT.C 
  2786.  
  2787.  
  2788.            The  first  five  files are the 6809 processor dependent sec-
  2789.         tions which contain the following:  
  2790.  
  2791.  
  2792.  
  2793.  
  2794.         BUILDING ASXXXX AND ASLINK                              PAGE 3-2
  2795.         BUILDING AN ASSEMBLER
  2796.  
  2797.  
  2798.              1.  m6809.h -  header  file containing the machine specific
  2799.                  definitions of constants,  variables,  structures,  and
  2800.                  types 
  2801.  
  2802.              2.  m09ext -  device  description, byte order, and file ex-
  2803.                  tension information 
  2804.  
  2805.              3.  m09pst -  a  table of the assembler general directives,
  2806.                  special device directives, and assembler mnemonics with
  2807.                  associated operation codes 
  2808.  
  2809.              4.  m09mch / m09adr -  machine specific code for processing
  2810.                  the device mnemonics,  addressing  modes,  and  special
  2811.                  directives 
  2812.  
  2813.  
  2814.            The  remaining nine files provide the device independent sec-
  2815.         tions which handle the  details  of  file  input/output,  symbol
  2816.         table  generation,  program/data areas, expression analysis, and
  2817.         assembler directive processing.  
  2818.  
  2819.            The  assembler defaults to the not case sensitive mode.  This
  2820.         may be altered by changing the case sensitivity flag in asm.h to 
  2821.  
  2822.                 /*
  2823.                  * Case Sensitivity Flag
  2824.                  */
  2825.                 #define CASE_SENSITIVE  1
  2826.  
  2827.            The  assemblers  and  linker should be compiled with the same
  2828.         case sensitivity option.  
  2829.  
  2830.  
  2831.         3.2  BUILDING ASLINK 
  2832.  
  2833.  
  2834.            The building of the linker requires the following files:  
  2835.  
  2836.              1.  ASLINK.H 
  2837.              2.  LKMAIN.C 
  2838.              3.  LKLEX.C 
  2839.              4.  LKAREA.C 
  2840.              5.  LKHEAD.C 
  2841.              6.  LKSYM.C 
  2842.              7.  LKEVAL.C 
  2843.              8.  LKDATA.C 
  2844.              9.  LKLIST.C 
  2845.             10.  LKRLOC.C 
  2846.             11.  LKLIBR.C 
  2847.             12.  LKS19.C 
  2848.             13.  LKIHX.C 
  2849.  
  2850.  
  2851.  
  2852.         BUILDING ASXXXX AND ASLINK                              PAGE 3-3
  2853.         BUILDING ASLINK
  2854.  
  2855.  
  2856.            The linker defaults to the not case sensitive mode.  This may
  2857.         be altered by changing the case sensitivity flag in aslink.h to 
  2858.  
  2859.                 /*
  2860.                  * Case Sensitivity Flag
  2861.                  */
  2862.                 #define CASE_SENSITIVE  1
  2863.  
  2864.            The  linker  and  assemblers should be compiled with the same
  2865.         case sensitivity option.  
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.  
  2872.  
  2873.  
  2874.  
  2875.  
  2876.  
  2877.  
  2878.  
  2879.  
  2880.                                    APPENDIX A
  2881.  
  2882.                                 AS6800 ASSEMBLER
  2883.  
  2884.  
  2885.  
  2886.  
  2887.  
  2888.         A.1  6800 REGISTER SET 
  2889.  
  2890.         The following is a list of the 6800 registers used by AS6800:  
  2891.  
  2892.                 a,b     -       8-bit accumulators
  2893.                 x       -       index register
  2894.  
  2895.  
  2896.         A.2  6800 INSTRUCTION SET 
  2897.  
  2898.  
  2899.            The following tables list all 6800/6802/6808 mnemonics recog-
  2900.         nized by the AS6800 assembler.  The designation [] refers  to  a
  2901.         required addressing mode argument.  The following list specifies
  2902.         the format for each addressing mode supported by AS6800:  
  2903.  
  2904.                 #data           immediate data
  2905.                                 byte or word data
  2906.         
  2907.                 *dir            direct page addressing
  2908.                                 (see .setdp directive)
  2909.                                 0 <= dir <= 255 
  2910.         
  2911.                 ,x              register indirect addressing
  2912.                                 zero offset
  2913.         
  2914.                 offset,x        register indirect addressing
  2915.                                 0 <= offset <= 255
  2916.         
  2917.                 ext             extended addressing
  2918.         
  2919.                 label           branch label
  2920.  
  2921.         The  terms  data, dir, offset, ext, and label may all be expres-
  2922.         sions.  
  2923.  
  2924.  
  2925.  
  2926.         AS6800 ASSEMBLER                                        PAGE A-2
  2927.         6800 INSTRUCTION SET
  2928.  
  2929.  
  2930.            Note  that  not all addressing modes are valid with every in-
  2931.         struction, refer to the 6800 technical data for valid modes.  
  2932.  
  2933.  
  2934.         A.2.1  Inherent Instructions 
  2935.  
  2936.                 aba                     cba
  2937.                 clc                     cli
  2938.                 clv                     daa
  2939.                 des                     dex
  2940.                 ins                     inx
  2941.                 nop                     rti
  2942.                 rts                     sba
  2943.                 sec                     sei
  2944.                 sev                     swi
  2945.                 tab                     tap
  2946.                 tba                     tpa
  2947.                 tsx                     txs
  2948.                 wai
  2949.         
  2950.                 psha                    pshb
  2951.                 psh a                   psh b
  2952.                 pula                    pulb
  2953.                 pul a                   pul b
  2954.  
  2955.  
  2956.         A.2.2  Branch Instructions 
  2957.  
  2958.                 bra     label           bhi     label
  2959.                 bls     label           bcc     label
  2960.                 bhs     label           bcs     label
  2961.                 blo     label           bne     label
  2962.                 beq     label           bvc     label
  2963.                 bvs     label           bpl     label
  2964.                 bmi     label           bge     label
  2965.                 blt     label           bgt     label
  2966.                 ble     label           bsr     label
  2967.  
  2968.  
  2969.         AS6800 ASSEMBLER                                        PAGE A-3
  2970.         6800 INSTRUCTION SET
  2971.  
  2972.  
  2973.         A.2.3  Single Operand Instructions 
  2974.  
  2975.                 asla                    aslb
  2976.                 asl a                   asl b
  2977.                 asl     []
  2978.         
  2979.                 asra                    asrb
  2980.                 asr a                   asr b
  2981.                 asr     []
  2982.         
  2983.                 clra                    clrb
  2984.                 clr a                   clr b
  2985.                 clr     []
  2986.         
  2987.                 coma                    comb
  2988.                 com a                   com b
  2989.                 com     []
  2990.         
  2991.                 deca                    decb
  2992.                 dec a                   dec b
  2993.                 dec     []
  2994.         
  2995.                 inca                    incb
  2996.                 inc a                   inc b
  2997.                 inc     []
  2998.         
  2999.                 lsla                    lslb
  3000.                 lsl a                   lsl b
  3001.                 lsl     []
  3002.         
  3003.                 lsra                    lsrb
  3004.                 lsr a                   lsr b
  3005.                 lsr     []
  3006.         
  3007.                 nega                    negb
  3008.                 neg a                   neg b
  3009.                 neg     []
  3010.         
  3011.                 rola                    rolb
  3012.                 rol a                   rol b
  3013.                 rol     []
  3014.         
  3015.                 rora                    rorb
  3016.                 ror a                   ror b
  3017.                 ror     []
  3018.         
  3019.                 tsta                    tstb
  3020.                 tst a                   tst b
  3021.                 tst     []
  3022.  
  3023.  
  3024.         AS6800 ASSEMBLER                                        PAGE A-4
  3025.         6800 INSTRUCTION SET
  3026.  
  3027.  
  3028.         A.2.4  Double Operand Instructions 
  3029.  
  3030.                 adca    []              adcb    []
  3031.                 adc a   []              adc b   []
  3032.         
  3033.                 adda    []              addb    []
  3034.                 add a   []              add b   []
  3035.         
  3036.                 anda    []              andb    []
  3037.                 and a   []              and b   []
  3038.         
  3039.                 bita    []              bitb    []
  3040.                 bit a   []              bit b   []
  3041.         
  3042.                 cmpa    []              cmpb    []
  3043.                 cmp a   []              cmp b   []
  3044.         
  3045.                 eora    []              eorb    []
  3046.                 eor a   []              eor b   []
  3047.         
  3048.                 ldaa    []              ldab    []
  3049.                 lda a   []              lda b   []
  3050.         
  3051.                 oraa    []              orab    []
  3052.                 ora a   []              ora b   []
  3053.         
  3054.                 sbca    []              sbcb    []
  3055.                 sbc a   []              sbc b   []
  3056.         
  3057.                 staa    []              stab    []
  3058.                 sta a   []              sta b   []
  3059.         
  3060.                 suba    []              subb    []
  3061.                 sub a   []              sub b   []
  3062.  
  3063.  
  3064.         A.2.5  Jump and Jump to Subroutine Instructions 
  3065.  
  3066.                 jmp     []              jsr     []
  3067.  
  3068.  
  3069.  
  3070.  
  3071.         AS6800 ASSEMBLER                                        PAGE A-5
  3072.         6800 INSTRUCTION SET
  3073.  
  3074.  
  3075.         A.2.6  Long Register Instructions 
  3076.  
  3077.                 cpx     []
  3078.                 lds     []              sts     []
  3079.                 ldx     []              stx     []
  3080.  
  3081.  
  3082.  
  3083.  
  3084.  
  3085.  
  3086.  
  3087.  
  3088.  
  3089.  
  3090.  
  3091.  
  3092.  
  3093.  
  3094.                                    APPENDIX B
  3095.  
  3096.                                 AS6801 ASSEMBLER
  3097.  
  3098.  
  3099.  
  3100.  
  3101.  
  3102.         B.1  .hd6303 DIRECTIVE 
  3103.  
  3104.         Format:  
  3105.  
  3106.                 .hd6303 
  3107.  
  3108.         The  .hd6303 directive enables processing of the HD6303 specific
  3109.         mnemonics not included in  the  6801  instruction  set.   HD6303
  3110.         mnemonics  encountered  without  the  .hd6303  directive will be
  3111.         flagged with an 'o' error.  
  3112.  
  3113.  
  3114.         B.2  6801 REGISTER SET 
  3115.  
  3116.         The following is a list of the 6801 registers used by AS6801:  
  3117.  
  3118.                 a,b     -       8-bit accumulators
  3119.                 d       -       16-bit accumulator <a:b>
  3120.                 x       -       index register
  3121.  
  3122.  
  3123.         B.3  6801 INSTRUCTION SET 
  3124.  
  3125.  
  3126.            The  following tables list all 6801/6303 mnemonics recognized
  3127.         by the AS6801 assembler.  The designation []  refers  to  a  re-
  3128.         quired  addressing  mode argument.  The following list specifies
  3129.         the format for each addressing mode supported by AS6801:  
  3130.  
  3131.                 #data           immediate data
  3132.                                 byte or word data
  3133.         
  3134.                 *dir            direct page addressing
  3135.                                 (see .setdp directive)
  3136.                                 0 <= dir <= 255 
  3137.         
  3138.  
  3139.  
  3140.         AS6801 ASSEMBLER                                        PAGE B-2
  3141.         6801 INSTRUCTION SET
  3142.  
  3143.  
  3144.                 ,x              register indirect addressing
  3145.                                 zero offset
  3146.         
  3147.                 offset,x        register indirect addressing
  3148.                                 0 <= offset <= 255
  3149.         
  3150.                 ext             extended addressing
  3151.         
  3152.                 label           branch label
  3153.  
  3154.         The  terms  data, dir, offset, ext, and label may all be expres-
  3155.         sions.  
  3156.  
  3157.            Note  that  not all addressing modes are valid with every in-
  3158.         struction, refer to  the  6801/6303  technical  data  for  valid
  3159.         modes.  
  3160.  
  3161.  
  3162.         B.3.1  Inherent Instructions 
  3163.  
  3164.                 aba             abx
  3165.                 cba             clc
  3166.                 cli             clv
  3167.                 daa             des
  3168.                 dex             ins
  3169.                 inx             mul
  3170.                 nop             rti
  3171.                 rts             sba
  3172.                 sec             sei
  3173.                 sev             swi
  3174.                 tab             tap
  3175.                 tba             tpa
  3176.                 tsx             txs
  3177.                 wai
  3178.  
  3179.  
  3180.         B.3.2  Branch Instructions 
  3181.  
  3182.                 bra     label           brn     label
  3183.                 bhi     label           bls     label
  3184.                 bcc     label           bhs     label
  3185.                 bcs     label           blo     label
  3186.                 bne     label           beq     label
  3187.                 bvc     label           bvs     label
  3188.                 bpl     label           bmi     label
  3189.                 bge     label           blt     label
  3190.                 bgt     label           ble     label
  3191.                 bsr     label
  3192.  
  3193.  
  3194.         AS6801 ASSEMBLER                                        PAGE B-3
  3195.         6801 INSTRUCTION SET
  3196.  
  3197.  
  3198.         B.3.3  Single Operand Instructions 
  3199.  
  3200.                 asla            aslb            asld
  3201.                 asl a           asl b           asl d
  3202.                 asl     []
  3203.         
  3204.                 asra            asrb
  3205.                 asr a           asr b
  3206.                 asr     []
  3207.         
  3208.                 clra            clrb
  3209.                 clr a           clr b
  3210.                 clr     []
  3211.         
  3212.                 coma            comb
  3213.                 com a           com b
  3214.                 com     []
  3215.         
  3216.                 deca            decb
  3217.                 dec a           dec b
  3218.                 dec     []
  3219.         
  3220.                 eora            eorb
  3221.                 eor a           eor b
  3222.                 eor     []
  3223.         
  3224.                 inca            incb
  3225.                 inc a           inc b
  3226.                 inc     []
  3227.         
  3228.                 lsla            lslb            lsld
  3229.                 lsl a           lsl b           lsl d
  3230.                 lsl     []
  3231.         
  3232.                 lsra            lsrb            lsrd
  3233.                 lsr a           lsr b           lsr d
  3234.                 lsr     []
  3235.         
  3236.                 nega            negb
  3237.                 neg a           neg b
  3238.                 neg     []
  3239.         
  3240.                 psha            pshb            pshx
  3241.                 psh a           psh b           psh x
  3242.         
  3243.                 pula            pulb            pulx
  3244.                 pul a           pul b           pul x
  3245.         
  3246.                 rola            rolb
  3247.                 rol a           rol b
  3248.                 rol     []
  3249.         
  3250.  
  3251.  
  3252.         AS6801 ASSEMBLER                                        PAGE B-4
  3253.         6801 INSTRUCTION SET
  3254.  
  3255.  
  3256.                 rora            rorb
  3257.                 ror a           ror b
  3258.                 ror     []
  3259.         
  3260.                 tsta            tstb
  3261.                 tst a           tst b
  3262.                 tst     []
  3263.  
  3264.  
  3265.         B.3.4  Double Operand Instructions 
  3266.  
  3267.                 adca    []      adcb    []
  3268.                 adc a   []      adc b   []
  3269.         
  3270.                 adda    []      addb    []      addd    []
  3271.                 add a   []      add b   []      add d   []
  3272.         
  3273.                 anda    []      andb    []
  3274.                 and a   []      and b   []
  3275.         
  3276.                 bita    []      bitb    []
  3277.                 bit a   []      bit b   []
  3278.         
  3279.                 cmpa    []      cmpb    []
  3280.                 cmp a   []      cmp b   []
  3281.         
  3282.                 ldaa    []      ldab    []
  3283.                 lda a   []      lda b   []
  3284.         
  3285.                 oraa    []      orab    []
  3286.                 ora a   []      ora b   []
  3287.         
  3288.                 sbca    []      sbcb    []
  3289.                 sbc a   []      sbc b   []
  3290.         
  3291.                 staa    []      stab    []
  3292.                 sta a   []      sta b   []
  3293.         
  3294.                 suba    []      subb    []      subd    []
  3295.                 sub a   []      sub b   []      sub d   []
  3296.  
  3297.  
  3298.  
  3299.  
  3300.         AS6801 ASSEMBLER                                        PAGE B-5
  3301.         6801 INSTRUCTION SET
  3302.  
  3303.  
  3304.         B.3.5  Jump and Jump to Subroutine Instructions 
  3305.  
  3306.                 jmp     []      jsr     []
  3307.  
  3308.  
  3309.         B.3.6  Long Register Instructions 
  3310.  
  3311.                 cpx     []      ldd     []
  3312.                 lds     []      ldx     []
  3313.                 std     []      sts     []
  3314.                 stx     []
  3315.  
  3316.  
  3317.         B.3.7  6303 Specific Instructions 
  3318.  
  3319.                 aim     #data, []       eim     #data, []
  3320.                 oim     #data, []       tim     #data, []
  3321.         
  3322.                 xgdx            slp
  3323.  
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  
  3329.  
  3330.  
  3331.  
  3332.  
  3333.  
  3334.  
  3335.  
  3336.  
  3337.                                    APPENDIX C
  3338.  
  3339.                                 AS6804 ASSEMBLER
  3340.  
  3341.  
  3342.  
  3343.  
  3344.            Requires the .setdp directive to specify the ram area.  
  3345.  
  3346.  
  3347.         C.1  6804 REGISTER SET 
  3348.  
  3349.         The following is a list of the 6804 registers used by AS6804:  
  3350.  
  3351.                 x,y     -       index registers
  3352.  
  3353.  
  3354.         C.2  6804 INSTRUCTION SET 
  3355.  
  3356.  
  3357.            The  following  tables  list all 6804 mnemonics recognized by
  3358.         the AS6804 assembler.  The designation [] refers to  a  required
  3359.         addressing  mode  argument.   The  following  list specifies the
  3360.         format for each addressing mode supported by AS6804:  
  3361.  
  3362.                 #data           immediate data
  3363.                                 byte or word data
  3364.         
  3365.                 ,x              register indirect addressing
  3366.         
  3367.                 dir             direct addressing
  3368.                                 (see .setdp directive)
  3369.                                 0 <= dir <= 255
  3370.         
  3371.                 ext             extended addressing
  3372.         
  3373.                 label           branch label
  3374.  
  3375.         The  terms data, dir, and ext may be expressions.  The label for
  3376.         the short branchs beq, bne, bcc, and bcs must not be external.  
  3377.  
  3378.            Note  that  not all addressing modes are valid with every in-
  3379.         struction, refer to the 6804 technical data for valid modes.  
  3380.  
  3381.  
  3382.         AS6804 ASSEMBLER                                        PAGE C-2
  3383.         6804 INSTRUCTION SET
  3384.  
  3385.  
  3386.         C.2.1  Inherent Instructions 
  3387.  
  3388.                 coma            decx
  3389.                 decy            incx
  3390.                 incy            rola
  3391.                 rti             rts
  3392.                 stop            tax
  3393.                 tay             txa
  3394.                 tya             wait
  3395.  
  3396.  
  3397.         C.2.2  Branch Instructions 
  3398.  
  3399.                 bne     label           beq     label
  3400.                 bcc     label           bcs     label
  3401.  
  3402.  
  3403.         C.2.3  Single Operand Instructions 
  3404.  
  3405.                 add     []
  3406.                 and     []
  3407.                 cmp     []
  3408.                 dec     []
  3409.                 inc     []
  3410.                 lda     []
  3411.                 sta     []
  3412.                 sub     []
  3413.  
  3414.  
  3415.         C.2.4  Jump and Jump to Subroutine Instructions 
  3416.  
  3417.                 jsr     []
  3418.                 jmp     []
  3419.  
  3420.  
  3421.         C.2.5  Bit Test Instructions 
  3422.  
  3423.                 brclr   #data,[],label
  3424.                 brset   #data,[],label
  3425.         
  3426.                 bclr    #label,[]
  3427.                 bset    #label,[]
  3428.  
  3429.  
  3430.  
  3431.  
  3432.         AS6804 ASSEMBLER                                        PAGE C-3
  3433.         6804 INSTRUCTION SET
  3434.  
  3435.  
  3436.         C.2.6  Load Immediate data Instruction 
  3437.  
  3438.                 mvi     [],#data
  3439.  
  3440.  
  3441.         C.2.7  6804 Derived Instructions 
  3442.  
  3443.                 asla
  3444.                 bam     label
  3445.                 bap     label
  3446.                 bxmi    label
  3447.                 bxpl    label
  3448.                 bymi    label
  3449.                 bypl    label
  3450.                 clra
  3451.                 clrx
  3452.                 clry
  3453.                 deca
  3454.                 decx
  3455.                 decy
  3456.                 inca
  3457.                 incx
  3458.                 incy
  3459.                 ldxi    #data
  3460.                 ldyi    #data
  3461.                 nop
  3462.                 tax
  3463.                 tay
  3464.                 txa
  3465.                 tya
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474.  
  3475.  
  3476.  
  3477.  
  3478.  
  3479.  
  3480.                                    APPENDIX D
  3481.  
  3482.                                 AS6805 ASSEMBLER
  3483.  
  3484.  
  3485.  
  3486.  
  3487.  
  3488.         D.1  6805 REGISTER SET 
  3489.  
  3490.         The following is a list of the 6805 registers used by AS6805:  
  3491.  
  3492.                 a       -       8-bit accumulator
  3493.                 x       -       index register
  3494.  
  3495.  
  3496.         D.2  6805 INSTRUCTION SET 
  3497.  
  3498.  
  3499.            The  following  tables  list all 6805 mnemonics recognized by
  3500.         the AS6805 assembler.  The designation [] refers to  a  required
  3501.         addressing  mode  argument.   The  following  list specifies the
  3502.         format for each addressing mode supported by AS6805:  
  3503.  
  3504.                 #data           immediate data
  3505.                                 byte or word data
  3506.         
  3507.                 *dir            direct page addressing
  3508.                                 (see .setdp directive)
  3509.                                 0 <= dir <= 255 
  3510.         
  3511.                 ,x              register indirect addressing
  3512.                                 zero offset
  3513.         
  3514.                 offset,x        register indirect addressing
  3515.                                   0 <= offset <= 255   --- byte mode
  3516.                                 256 <= offset <= 65535 --- word mode
  3517.                                 (an externally defined offset uses the
  3518.                                  word mode)
  3519.         
  3520.                 ext             extended addressing
  3521.         
  3522.                 label           branch label
  3523.  
  3524.  
  3525.  
  3526.         AS6805 ASSEMBLER                                        PAGE D-2
  3527.         6805 INSTRUCTION SET
  3528.  
  3529.  
  3530.         The terms data, dir, offset, and ext may all be expressions.  
  3531.  
  3532.            Note  that  not all addressing modes are valid with every in-
  3533.         struction, refer to the 6805 technical data for valid modes.  
  3534.  
  3535.  
  3536.         D.2.1  Control Instructions 
  3537.  
  3538.                 clc             cli
  3539.                 nop             rsp
  3540.                 rti             rts
  3541.                 sec             sei
  3542.                 stop            swi
  3543.                 tax             txa
  3544.                 wait
  3545.  
  3546.  
  3547.         D.2.2  Bit Manipulation Instructions 
  3548.  
  3549.                 brset   #data,*dir,label
  3550.                 brclr   #data,*dir,label
  3551.         
  3552.                 bset    #data,*dir
  3553.                 bclr    #data,*dir
  3554.  
  3555.  
  3556.         D.2.3  Branch Instructions 
  3557.  
  3558.                 bra     label           brn     label
  3559.                 bhi     label           bls     label
  3560.                 bcc     label           bcs     label
  3561.                 bne     label           beq     label
  3562.                 bhcc    label           bhcs    label
  3563.                 bpl     label           bmi     label
  3564.                 bmc     label           bms     label
  3565.                 bil     label           bih     label
  3566.                 bsr     label
  3567.  
  3568.  
  3569.         AS6805 ASSEMBLER                                        PAGE D-3
  3570.         6805 INSTRUCTION SET
  3571.  
  3572.  
  3573.         D.2.4  Read-Modify-Write Instructions 
  3574.  
  3575.                 nega            negx
  3576.                 neg     []
  3577.         
  3578.                 coma            comx
  3579.                 com     []
  3580.         
  3581.                 lsra            lsrx
  3582.                 lsr     []
  3583.         
  3584.                 rora            rorx
  3585.                 ror     []
  3586.         
  3587.                 asra            asrx
  3588.                 asr     []
  3589.         
  3590.                 lsla            lslx
  3591.                 lsl     []
  3592.         
  3593.                 rola            rolx
  3594.                 rol     []
  3595.         
  3596.                 deca            decx
  3597.                 dec     []
  3598.         
  3599.                 inca            incx
  3600.                 inc     []
  3601.         
  3602.                 tsta            tstx
  3603.                 tst     []
  3604.         
  3605.                 clra            clrx
  3606.                 clr     []
  3607.  
  3608.  
  3609.         D.2.5  Register\Memory Instructions 
  3610.  
  3611.                 sub     []              cmp     []
  3612.                 sbc     []              cpx     []
  3613.                 and     []              bit     []
  3614.                 lda     []              sta     []
  3615.                 eor     []              adc     []
  3616.                 ora     []              add     []
  3617.                 ldx     []              stx     []
  3618.  
  3619.  
  3620.         AS6805 ASSEMBLER                                        PAGE D-4
  3621.         6805 INSTRUCTION SET
  3622.  
  3623.  
  3624.         D.2.6  Jump and Jump to Subroutine Instructions 
  3625.  
  3626.                 jmp     []              jsr     []
  3627.  
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.  
  3638.  
  3639.  
  3640.  
  3641.                                    APPENDIX E
  3642.  
  3643.                                 AS6808 ASSEMBLER
  3644.  
  3645.  
  3646.  
  3647.  
  3648.  
  3649.         E.1  68HC08 REGISTER SET 
  3650.  
  3651.         The  following  is  a  list  of  the  68HC08  registers  used by
  3652.         AS68HC08:  
  3653.  
  3654.                 a       -       8-bit accumulator
  3655.                 x       -       index register  <H:X>
  3656.                 s       -       stack pointer
  3657.  
  3658.  
  3659.         E.2  68HC08 INSTRUCTION SET 
  3660.  
  3661.  
  3662.            The  following tables list all 68HC08 mnemonics recognized by
  3663.         the AS6808 assembler.  The designation [] refers to  a  required
  3664.         addressing  mode  argument.   The  following  list specifies the
  3665.         format for each addressing mode supported by AS6808:  
  3666.  
  3667.                 #data           immediate data
  3668.                                 byte or word data
  3669.         
  3670.                 *dir            direct page addressing
  3671.                                 (see .setdp directive)
  3672.                                 0 <= dir <= 255 
  3673.         
  3674.                 ,x              register indexed addressing
  3675.                                 zero offset
  3676.         
  3677.                 offset,x        register indexed addressing
  3678.                                   0 <= offset <= 255   --- byte mode
  3679.                                 256 <= offset <= 65535 --- word mode
  3680.                                 (an externally defined offset uses the
  3681.                                  word mode)
  3682.         
  3683.                 ,x+             register indexed addressing
  3684.                                 zero offset with post increment
  3685.  
  3686.  
  3687.         AS6808 ASSEMBLER                                        PAGE E-2
  3688.         68HC08 INSTRUCTION SET
  3689.  
  3690.  
  3691.         
  3692.                 offset,x+       register indexed addressing
  3693.                                 unsigned byte offset with post increment
  3694.         
  3695.                 offset,s        stack pointer indexed addressing
  3696.                                   0 <= offset <= 255   --- byte mode
  3697.                                 256 <= offset <= 65535 --- word mode
  3698.                                 (an externally defined offset uses the
  3699.                                  word mode)
  3700.         
  3701.                 ext             extended addressing
  3702.         
  3703.                 label           branch label
  3704.  
  3705.         The terms data, dir, offset, and ext may all be expressions.  
  3706.  
  3707.            Note  that  not all addressing modes are valid with every in-
  3708.         struction, refer to the 68HC08 technical data for valid modes.  
  3709.  
  3710.  
  3711.         E.2.1  Control Instructions 
  3712.  
  3713.                 clc             cli             daa             div
  3714.                 mul             nop             nsa             psha
  3715.                 pshh            pshx            pula            pulh
  3716.                 pulx            rsp             rti             rts
  3717.                 sec             sei             stop            swi
  3718.                 tap             tax             tpa             tsx
  3719.                 txa             txs             wait
  3720.  
  3721.  
  3722.         E.2.2  Bit Manipulation Instructions 
  3723.  
  3724.                 brset   #data,*dir,label
  3725.                 brclr   #data,*dir,label
  3726.         
  3727.                 bset    #data,*dir
  3728.                 bclr    #data,*dir
  3729.  
  3730.  
  3731.         AS6808 ASSEMBLER                                        PAGE E-3
  3732.         68HC08 INSTRUCTION SET
  3733.  
  3734.  
  3735.         E.2.3  Branch Instructions 
  3736.  
  3737.                 bra     label           brn     label
  3738.                 bhi     label           bls     label
  3739.                 bcc     label           bcs     label
  3740.                 bne     label           beq     label
  3741.                 bhcc    label           bhcs    label
  3742.                 bpl     label           bmi     label
  3743.                 bmc     label           bms     label
  3744.                 bil     label           bih     label
  3745.                 bsr     label           bge     label
  3746.                 blt     label           bgt     label
  3747.                 ble     label
  3748.  
  3749.  
  3750.         E.2.4  Complex Branch Instructions 
  3751.  
  3752.                 cbeqa   [],label
  3753.                 cbeqx   [],label
  3754.                 cbeq    [],label
  3755.                 dbnza   label
  3756.                 dbnzx   label
  3757.                 dbnz    [],label
  3758.  
  3759.  
  3760.         AS6808 ASSEMBLER                                        PAGE E-4
  3761.         68HC08 INSTRUCTION SET
  3762.  
  3763.  
  3764.         E.2.5  Read-Modify-Write Instructions 
  3765.  
  3766.                 nega                    negx
  3767.                 neg     []
  3768.         
  3769.                 coma                    comx
  3770.                 com     []
  3771.         
  3772.                 lsra                    lsrx
  3773.                 lsr     []
  3774.         
  3775.                 rora                    rorx
  3776.                 ror     []
  3777.         
  3778.                 asra                    asrx
  3779.                 asr     []
  3780.         
  3781.                 asla                    aslx
  3782.                 asl     []
  3783.         
  3784.                 lsla                    lslx
  3785.                 lsl     []
  3786.         
  3787.                 rola                    rolx
  3788.                 rol     []
  3789.         
  3790.                 deca                    decx
  3791.                 dec     []
  3792.         
  3793.                 inca                    incx
  3794.                 inc     []
  3795.         
  3796.                 tsta                    tstx
  3797.                 tst     []
  3798.         
  3799.                 clra                    clrx
  3800.                 clr     []              clrh
  3801.         
  3802.                 aix     #data
  3803.         
  3804.                 ais     #data
  3805.  
  3806.  
  3807.         AS6808 ASSEMBLER                                        PAGE E-5
  3808.         68HC08 INSTRUCTION SET
  3809.  
  3810.  
  3811.         E.2.6  Register\Memory Instructions 
  3812.  
  3813.                 sub     []              cmp     []
  3814.                 sbc     []              cpx     []
  3815.                 and     []              bit     []
  3816.                 lda     []              sta     []
  3817.                 eor     []              adc     []
  3818.                 ora     []              add     []
  3819.                 ldx     []              stx     []
  3820.  
  3821.  
  3822.         E.2.7  Double Operand Move Instruction 
  3823.  
  3824.                 mov     [],[]
  3825.  
  3826.  
  3827.         E.2.8  16-Bit <H:X> Index Register Instructions 
  3828.  
  3829.                 cphx    []
  3830.                 ldhx    []
  3831.                 sthx    []
  3832.  
  3833.  
  3834.         E.2.9  Jump and Jump to Subroutine Instructions 
  3835.  
  3836.                 jmp     []              jsr     []
  3837.  
  3838.  
  3839.  
  3840.  
  3841.  
  3842.  
  3843.  
  3844.  
  3845.  
  3846.  
  3847.  
  3848.  
  3849.  
  3850.  
  3851.                                    APPENDIX F
  3852.  
  3853.                                 AS6809 ASSEMBLER
  3854.  
  3855.  
  3856.  
  3857.  
  3858.  
  3859.         F.1  6809 REGISTER SET 
  3860.  
  3861.         The following is a list of the 6809 registers used by AS6809:  
  3862.  
  3863.                 a,b     -       8-bit accumulators
  3864.                 d       -       16-bit accumulator <a:b>
  3865.                 x,y     -       index registers
  3866.                 s,u     -       stack pointers
  3867.                 pc      -       program counter
  3868.                 cc      -       condition code
  3869.                 dp      -       direct page
  3870.  
  3871.  
  3872.         F.2  6809 INSTRUCTION SET 
  3873.  
  3874.  
  3875.            The  following  tables  list all 6809 mnemonics recognized by
  3876.         the AS6809 assembler.  The designation [] refers to  a  required
  3877.         addressing  mode  argument.   The  following  list specifies the
  3878.         format for each addressing mode supported by AS6809:  
  3879.  
  3880.                 #data           immediate data
  3881.                                 byte or word data
  3882.         
  3883.                 *dir            direct page addressing
  3884.                                 (see .setdp directive)
  3885.                                 0 <= dir <= 255 
  3886.         
  3887.                 label           branch label
  3888.         
  3889.                 r,r1,r2         registers
  3890.                                 cc,a,b,d,dp,x,y,s,u,pc
  3891.         
  3892.                 ,-x     ,--x    register indexed
  3893.                                 autodecrement
  3894.         
  3895.  
  3896.  
  3897.         AS6809 ASSEMBLER                                        PAGE F-2
  3898.         6809 INSTRUCTION SET
  3899.  
  3900.  
  3901.                 ,x+     ,x++    register indexed
  3902.                                 autoincrement
  3903.         
  3904.                 ,x              register indexed addressing
  3905.                                 zero offset
  3906.         
  3907.                 offset,x        register indexed addressing
  3908.                                    -16 <= offset <= 15    ---  5-bit
  3909.                                   -128 <= offset <= -17   ---  8-bit
  3910.                                     16 <= offset <= 127   ---  8-bit
  3911.                                 -32768 <= offset <= -129  --- 16-bit
  3912.                                    128 <= offset <= 32767 --- 16-bit
  3913.                                 (external definition of offset
  3914.                                  uses 16-bit mode)
  3915.         
  3916.                 a,x             accumulator offset indexed addressing
  3917.         
  3918.                 ext             extended addressing
  3919.         
  3920.                 ext,pc          pc addressing ( pc <- pc + ext )
  3921.         
  3922.                 ext,pcr         pc relative addressing
  3923.                                 
  3924.                 [,--x]          register indexed indirect
  3925.                                 autodecrement
  3926.         
  3927.                 [,x++]          register indexed indirect
  3928.                                 autoincrement
  3929.         
  3930.                 [,x]            register indexed indirect addressing
  3931.                                 zero offset
  3932.         
  3933.                 [offset,x]      register indexed indirect addressing
  3934.                                   -128 <= offset <= 127   ---  8-bit
  3935.                                 -32768 <= offset <= -129  --- 16-bit
  3936.                                    128 <= offset <= 32767 --- 16-bit
  3937.                                 (external definition of offset
  3938.                                  uses 16-bit mode)
  3939.         
  3940.                 [a,x]           accumulator offset indexed
  3941.                                 indirect addressing
  3942.         
  3943.                 [ext]           extended indirect addressing
  3944.         
  3945.                 [ext,pc]        pc indirect addressing
  3946.                                 ( [pc <- pc + ext] )
  3947.         
  3948.                 [ext,pcr]       pc relative indirect addressing
  3949.  
  3950.         The  terms  data, dir, label, offset, and ext may all be expres-
  3951.         sions.  
  3952.  
  3953.  
  3954.  
  3955.         AS6809 ASSEMBLER                                        PAGE F-3
  3956.         6809 INSTRUCTION SET
  3957.  
  3958.  
  3959.            Note  that  not all addressing modes are valid with every in-
  3960.         struction, refer to the 6809 technical data for valid modes.  
  3961.  
  3962.  
  3963.         F.2.1  Inherent Instructions 
  3964.  
  3965.                 abx             daa
  3966.                 mul             nop
  3967.                 rti             rts
  3968.                 sex             swi
  3969.                 swi1            swi2
  3970.                 swi3            sync
  3971.  
  3972.  
  3973.         F.2.2  Short Branch Instructions 
  3974.  
  3975.                 bcc     label           bcs     label
  3976.                 beq     label           bge     label
  3977.                 bgt     label           bhi     label
  3978.                 bhis    label           bhs     label
  3979.                 ble     label           blo     label
  3980.                 blos    label           bls     label
  3981.                 blt     label           bmi     label
  3982.                 bne     label           bpl     label
  3983.                 bra     label           brn     label
  3984.                 bvc     label           bvs     label
  3985.                 bsr     label
  3986.  
  3987.  
  3988.         F.2.3  Long Branch Instructions 
  3989.  
  3990.                 lbcc    label           lbcs    label
  3991.                 lbeq    label           lbge    label
  3992.                 lbgt    label           lbhi    label
  3993.                 lbhis   label           lbhs    label
  3994.                 lble    label           lblo    label
  3995.                 lblos   label           lbls    label
  3996.                 lblt    label           lbmi    label
  3997.                 lbne    label           lbpl    label
  3998.                 lbra    label           lbrn    label
  3999.                 lbvc    label           lbvs    label
  4000.                 lbsr    label
  4001.  
  4002.  
  4003.         AS6809 ASSEMBLER                                        PAGE F-4
  4004.         6809 INSTRUCTION SET
  4005.  
  4006.  
  4007.         F.2.4  Single Operand Instructions 
  4008.  
  4009.                 asla            aslb
  4010.                 asl     []
  4011.         
  4012.                 asra            asrb
  4013.                 asr     []
  4014.         
  4015.                 clra            clrb
  4016.                 clr     []
  4017.         
  4018.                 coma            comb
  4019.                 com     []
  4020.         
  4021.                 deca            decb
  4022.                 dec     []
  4023.         
  4024.                 inca            incb
  4025.                 inc     []
  4026.         
  4027.                 lsla            lslb
  4028.                 lsl     []
  4029.         
  4030.                 lsra            lsrb
  4031.                 lsr     []
  4032.         
  4033.                 nega            negb
  4034.                 neg     []
  4035.         
  4036.                 rola            rolb
  4037.                 rol     []
  4038.         
  4039.                 rora            rorb
  4040.                 ror     []
  4041.         
  4042.                 tsta            tstb
  4043.                 tst     []
  4044.  
  4045.  
  4046.         AS6809 ASSEMBLER                                        PAGE F-5
  4047.         6809 INSTRUCTION SET
  4048.  
  4049.  
  4050.         F.2.5  Double Operand Instructions 
  4051.  
  4052.                 adca    []              adcb    []
  4053.         
  4054.                 adda    []              addb    []
  4055.         
  4056.                 anda    []              andb    []
  4057.         
  4058.                 bita    []              bitb    []
  4059.         
  4060.                 cmpa    []              cmpb    []
  4061.         
  4062.                 eora    []              eorb    []
  4063.         
  4064.                 lda     []              ldb     []
  4065.         
  4066.                 ora     []              orb     []
  4067.         
  4068.                 sbca    []              sbcb    []
  4069.         
  4070.                 sta     []              stb     []
  4071.         
  4072.                 suba    []              subb    []
  4073.  
  4074.  
  4075.         F.2.6  D-register Instructions 
  4076.  
  4077.                 addd    []              subd    []
  4078.                 cmpd    []              ldd     []
  4079.                 std     []
  4080.  
  4081.  
  4082.         F.2.7  Index/Stack Register Instructions 
  4083.  
  4084.                 cmps    []              cmpu    []
  4085.                 cmpx    []              cmpy    []
  4086.         
  4087.                 lds     []              ldu     []
  4088.                 ldx     []              ldy     []
  4089.         
  4090.                 leas    []              leau    []
  4091.                 leax    []              leay    []
  4092.         
  4093.                 sts     []              stu     []
  4094.                 stx     []              sty     []
  4095.         
  4096.                 pshs    r               pshu    r
  4097.                 puls    r               pulu    r
  4098.  
  4099.  
  4100.         AS6809 ASSEMBLER                                        PAGE F-6
  4101.         6809 INSTRUCTION SET
  4102.  
  4103.  
  4104.         F.2.8  Jump and Jump to Subroutine Instructions 
  4105.  
  4106.                 jmp     []              jsr     []
  4107.  
  4108.  
  4109.         F.2.9  Register - Register Instructions 
  4110.  
  4111.                 exg     r1,r2           tfr     r1,r2
  4112.  
  4113.  
  4114.         F.2.10  Condition Code Register Instructions 
  4115.  
  4116.                 andcc   #data           orcc    #data
  4117.                 cwai    #data
  4118.  
  4119.  
  4120.         F.2.11  6800 Compatibility Instructions 
  4121.  
  4122.                 aba             cba
  4123.                 clc             cli
  4124.                 clv             des
  4125.                 dex             ins
  4126.                 inx
  4127.                 ldaa    []      ldab    []
  4128.                 oraa    []      orab    []
  4129.                 psha            pshb
  4130.                 pula            pulb
  4131.                 sba             sec
  4132.                 sei             sev
  4133.                 staa    []      stab    []
  4134.                 tab             tap
  4135.                 tba             tpa
  4136.                 tsx             txs
  4137.                 wai
  4138.  
  4139.  
  4140.  
  4141.  
  4142.  
  4143.  
  4144.  
  4145.  
  4146.  
  4147.  
  4148.  
  4149.  
  4150.  
  4151.  
  4152.                                    APPENDIX G
  4153.  
  4154.                                 AS6811 ASSEMBLER
  4155.  
  4156.  
  4157.  
  4158.  
  4159.  
  4160.         G.1  68HC11 REGISTER SET 
  4161.  
  4162.         The following is a list of the 68HC11 registers used by AS6811: 
  4163.  
  4164.                 a,b     -       8-bit accumulators
  4165.                 d       -       16-bit accumulator <a:b>
  4166.                 x,y     -       index registers
  4167.  
  4168.  
  4169.         G.2  68HC11 INSTRUCTION SET 
  4170.  
  4171.  
  4172.            The  following tables list all 68HC11 mnemonics recognized by
  4173.         the AS6811 assembler.  The designation [] refers to  a  required
  4174.         addressing  mode  argument.   The  following  list specifies the
  4175.         format for each addressing mode supported by AS6811:  
  4176.  
  4177.                 #data           immediate data
  4178.                                 byte or word data
  4179.         
  4180.                 *dir            direct page addressing
  4181.                                 (see .setdp directive)
  4182.                                 0 <= dir <= 255 
  4183.         
  4184.                 ,x              register indirect addressing
  4185.                                 zero offset
  4186.         
  4187.                 offset,x        register indirect addressing
  4188.                                 0 <= offset <= 255
  4189.         
  4190.                 ext             extended addressing
  4191.         
  4192.                 label           branch label
  4193.  
  4194.         The terms data, dir, offset, and ext may all be expressions.  
  4195.  
  4196.  
  4197.  
  4198.         AS6811 ASSEMBLER                                        PAGE G-2
  4199.         68HC11 INSTRUCTION SET
  4200.  
  4201.  
  4202.            Note  that  not all addressing modes are valid with every in-
  4203.         struction, refer to the 68HC11 technical data for valid modes.  
  4204.  
  4205.  
  4206.         G.2.1  Inherent Instructions 
  4207.  
  4208.                 aba             abx
  4209.                 aby             cba
  4210.                 clc             cli
  4211.                 clv             daa
  4212.                 des             dex
  4213.                 dey             fdiv
  4214.                 idiv            ins
  4215.                 inx             iny
  4216.                 mul             nop
  4217.                 rti             rts
  4218.                 sba             sec
  4219.                 sei             sev
  4220.                 stop            swi
  4221.                 tab             tap
  4222.                 tba             tpa
  4223.                 tsx             txs
  4224.                 wai             xgdx
  4225.                 xgdy
  4226.         
  4227.                 psha            pshb
  4228.                 psh a           psh b
  4229.                 pshx            pshy
  4230.                 psh x           psh y
  4231.         
  4232.                 pula            pulb
  4233.                 pul a           pul b
  4234.                 pulx            puly
  4235.                 pul x           pul y
  4236.  
  4237.  
  4238.         G.2.2  Branch Instructions 
  4239.  
  4240.                 bra     label           brn     label
  4241.                 bhi     label           bls     label
  4242.                 bcc     label           bhs     label
  4243.                 bcs     label           blo     label
  4244.                 bne     label           beq     label
  4245.                 bvc     label           bvs     label
  4246.                 bpl     label           bmi     label
  4247.                 bge     label           blt     label
  4248.                 bgt     label           ble     label
  4249.                 bsr     label
  4250.  
  4251.  
  4252.         AS6811 ASSEMBLER                                        PAGE G-3
  4253.         68HC11 INSTRUCTION SET
  4254.  
  4255.  
  4256.         G.2.3  Single Operand Instructions 
  4257.  
  4258.                 asla            aslb            asld
  4259.                 asl a           asl b           asl d
  4260.                 asl     []
  4261.         
  4262.                 asra            asrb
  4263.                 asr a           asr b
  4264.                 asr     []
  4265.         
  4266.                 clra            clrb
  4267.                 clr a           clr b
  4268.                 clr     label
  4269.         
  4270.                 coma            comb
  4271.                 com a           com b
  4272.                 com     []
  4273.         
  4274.                 deca            decb
  4275.                 dec a           dec b
  4276.                 dec     []
  4277.         
  4278.                 inca            incb
  4279.                 inc a           inc b
  4280.                 inc     []
  4281.         
  4282.                 lsla            lslb            lsld
  4283.                 lsl a           lsl b           lsl d
  4284.                 lsl     []
  4285.         
  4286.                 lsra            lsrb            lsrd
  4287.                 lsr a           lsr b           lsr d
  4288.                 lsr     []
  4289.         
  4290.                 nega            negb
  4291.                 neg a           neg b
  4292.                 neg     []
  4293.         
  4294.                 rola            rolb
  4295.                 rol a           rol b
  4296.                 rol     []
  4297.         
  4298.                 rora            rorb
  4299.                 ror a           ror b
  4300.                 ror     []
  4301.         
  4302.                 tsta            tstb
  4303.                 tst a           tst b
  4304.                 tst     []
  4305.  
  4306.  
  4307.         AS6811 ASSEMBLER                                        PAGE G-4
  4308.         68HC11 INSTRUCTION SET
  4309.  
  4310.  
  4311.         G.2.4  Double Operand Instructions 
  4312.  
  4313.                 adca    []              adcb    []
  4314.                 adc a   []              adc b   []
  4315.         
  4316.                 adda    []      addb    []      addd    []
  4317.                 add a   []      add b   []      add d   []
  4318.         
  4319.                 anda    []              andb    []
  4320.                 and a   []              and b   []
  4321.         
  4322.                 bita    []              bitb    []
  4323.                 bit a   []              bit b   []
  4324.         
  4325.                 cmpa    []              cmpb    []
  4326.                 cmp a   []              cmp b   []
  4327.         
  4328.                 eora    []              eorb    []
  4329.                 eor a   []              eor b   []
  4330.         
  4331.                 ldaa    []              ldab    []
  4332.                 lda a   []              lda b   []
  4333.         
  4334.                 oraa    []              orab    []
  4335.                 ora a   []              ora b   []
  4336.         
  4337.                 sbca    []              sbcb    []
  4338.                 sbc a   []              sbc b   []
  4339.         
  4340.                 staa    []              stab    []
  4341.                 sta a   []              sta b   []
  4342.         
  4343.                 suba    []      subb    []      subd    []
  4344.                 sub a   []      sub b   []      sub d   []
  4345.  
  4346.  
  4347.         G.2.5  Bit Manupulation Instructions 
  4348.  
  4349.                 bclr    [],#data
  4350.                 bset    [],#data
  4351.         
  4352.                 brclr   [],#data,label
  4353.                 brset   [],#data,label
  4354.  
  4355.  
  4356.  
  4357.  
  4358.         AS6811 ASSEMBLER                                        PAGE G-5
  4359.         68HC11 INSTRUCTION SET
  4360.  
  4361.  
  4362.         G.2.6  Jump and Jump to Subroutine Instructions 
  4363.  
  4364.                 jmp     []              jsr     []
  4365.  
  4366.  
  4367.         G.2.7  Long Register Instructions 
  4368.  
  4369.                 cpx     []              cpy     []
  4370.         
  4371.                 ldd     []              lds     []
  4372.                 ldx     []              ldy     []
  4373.         
  4374.                 std     []              sts     []
  4375.                 stx     []              sty     []
  4376.  
  4377.  
  4378.  
  4379.  
  4380.  
  4381.  
  4382.  
  4383.  
  4384.  
  4385.  
  4386.  
  4387.  
  4388.  
  4389.  
  4390.                                    APPENDIX H
  4391.  
  4392.                                 AS6812 ASSEMBLER
  4393.  
  4394.  
  4395.  
  4396.  
  4397.  
  4398.         H.1  68HC12 REGISTER SET 
  4399.  
  4400.         The following is a list of the 68HC12 registers used by AS6812: 
  4401.  
  4402.                 a,b     -       8-bit accumulators
  4403.                 d       -       16-bit accumulator <a:b>
  4404.                 x,y     -       index registers
  4405.                 sp,s    -       stack pointer
  4406.                 pc      -       program counter
  4407.                 ccr,cc  -       condition code register
  4408.  
  4409.  
  4410.         H.2  68HC12 INSTRUCTION SET 
  4411.  
  4412.  
  4413.            The  following tables list all 68HC12 mnemonics recognized by
  4414.         the AS6812 assembler.  The designation [] refers to  a  required
  4415.         addressing  mode  argument.   The  following  list specifies the
  4416.         format for each addressing mode supported by AS6812:  
  4417.  
  4418.                 #data           immediate data
  4419.                                 byte or word data
  4420.         
  4421.                 ext             extended addressing
  4422.         
  4423.                 pg              memory page number
  4424.         
  4425.                 *dir            direct page addressing
  4426.                                 (see .setdp directive)
  4427.                                 0 <= dir <= 255 
  4428.         
  4429.                 label           branch label
  4430.         
  4431.                 r,r1,r2         registers
  4432.                                 ccr,a,b,d,x,y,sp,pc
  4433.         
  4434.  
  4435.  
  4436.         AS6812 ASSEMBLER                                        PAGE H-2
  4437.         68HC12 INSTRUCTION SET
  4438.  
  4439.  
  4440.                 -x      x-      register indexed, pre or
  4441.                 ,-x     ,x-     post autodecrement by 1
  4442.         
  4443.                 n,-x    n,x-    register indexed, pre or
  4444.                                 post autodecrement by 1 - 8
  4445.         
  4446.                 +x      x+      register indexed, pre or
  4447.                 ,+x     ,x+     post autoincrement by 1
  4448.         
  4449.                 n,+x    n,x+    register indexed, pre or
  4450.                                 post autoincrement by 1 - 8
  4451.         
  4452.                 offset,x        register indexed addressing
  4453.                                    -16 <= offset <= 15    ---  5-bit
  4454.                                   -256 <= offset <= -17   ---  9-bit
  4455.                                     16 <= offset <= 255   ---  9-bit
  4456.                                 -32768 <= offset <= -257  --- 16-bit
  4457.                                    256 <= offset <= 32767 --- 16-bit
  4458.                                 (external definition of offset
  4459.                                  uses 16-bit mode)
  4460.         
  4461.                 [offset,x]      register indexed indirect addressing
  4462.                                 -32768 <= offset <= 32767 --- 16-bit
  4463.         
  4464.                 [,x]            register indexed indirect addressing
  4465.                                 zero offset
  4466.         
  4467.                 a,x             accumulator offset indexed addressing
  4468.         
  4469.                 [d,x]           d accumulator offset indexed
  4470.                                 indirect addressing
  4471.  
  4472.         The  terms  data, dir, label, offset, and ext may all be expres-
  4473.         sions.  
  4474.  
  4475.            Note  that  not all addressing modes are valid with every in-
  4476.         struction, refer to the 68HC12 technical data for valid modes.  
  4477.  
  4478.  
  4479.         AS6812 ASSEMBLER                                        PAGE H-3
  4480.         68HC12 INSTRUCTION SET
  4481.  
  4482.  
  4483.         H.2.1  Inherent Instructions 
  4484.  
  4485.                 aba             bgnd            cba
  4486.                 daa             dex             dey
  4487.                 ediv            edivs           emul
  4488.                 emuls           fdiv            idiv
  4489.                 idivs           inx             iny
  4490.                 mem             mul             nop
  4491.                 psha            pshb            pshc
  4492.                 pshd            pshx            pshy
  4493.                 pula            pulb            pulc
  4494.                 puld            pulx            puly
  4495.                 rev             revw            rtc
  4496.                 rti             rts             sba
  4497.                 stop            swi             tab
  4498.                 tba             wai             wav
  4499.                 wavr
  4500.  
  4501.  
  4502.         H.2.2  Short Branch Instructions 
  4503.  
  4504.                 bcc     label           bcs     label
  4505.                 beq     label           bge     label
  4506.                 bgt     label           bhi     label
  4507.                 bhis    label           bhs     label
  4508.                 ble     label           blo     label
  4509.                 blos    label           bls     label
  4510.                 blt     label           bmi     label
  4511.                 bne     label           bpl     label
  4512.                 bra     label           brn     label
  4513.                 bvc     label           bvs     label
  4514.                 bsr     label
  4515.  
  4516.  
  4517.         H.2.3  Long Branch Instructions 
  4518.  
  4519.                 lbcc    label           lbcs    label
  4520.                 lbeq    label           lbge    label
  4521.                 lbgt    label           lbhi    label
  4522.                 lbhis   label           lbhs    label
  4523.                 lble    label           lblo    label
  4524.                 lblos   label           lbls    label
  4525.                 lblt    label           lbmi    label
  4526.                 lbne    label           lbpl    label
  4527.                 lbra    label           lbrn    label
  4528.                 lbvc    label           lbvs    label
  4529.  
  4530.  
  4531.         AS6812 ASSEMBLER                                        PAGE H-4
  4532.         68HC12 INSTRUCTION SET
  4533.  
  4534.  
  4535.         H.2.4  Branch on Decrement, Test, or Increment 
  4536.  
  4537.                 dbeq    r,label         dbne    r,label
  4538.                 ibeq    r,label         ibne    r,label
  4539.                 tbeq    r,label         tbne    r,label
  4540.  
  4541.  
  4542.         H.2.5  Bit Clear and Set Instructions 
  4543.  
  4544.                 bclr    [],#data
  4545.                 bset    [],#data
  4546.  
  4547.  
  4548.         H.2.6  Branch on Bit Clear or Set 
  4549.  
  4550.                 brclr   [],#data,label
  4551.                 brset   [],#data,label
  4552.  
  4553.  
  4554.         AS6812 ASSEMBLER                                        PAGE H-5
  4555.         68HC12 INSTRUCTION SET
  4556.  
  4557.  
  4558.         H.2.7  Single Operand Instructions 
  4559.  
  4560.                 asla            aslb
  4561.                 asl     []
  4562.         
  4563.                 asra            asrb
  4564.                 asr     []
  4565.         
  4566.                 clra            clrb
  4567.                 clr     []
  4568.         
  4569.                 coma            comb
  4570.                 com     []
  4571.         
  4572.                 deca            decb
  4573.                 dec     []
  4574.         
  4575.                 inca            incb
  4576.                 inc     []
  4577.         
  4578.                 lsla            lslb
  4579.                 lsl     []
  4580.         
  4581.                 lsra            lsrb
  4582.                 lsr     []
  4583.         
  4584.                 nega            negb
  4585.                 neg     []
  4586.         
  4587.                 rola            rolb
  4588.                 rol     []
  4589.         
  4590.                 rora            rorb
  4591.                 ror     []
  4592.         
  4593.                 tsta            tstb
  4594.                 tst     []
  4595.  
  4596.  
  4597.         AS6812 ASSEMBLER                                        PAGE H-6
  4598.         68HC12 INSTRUCTION SET
  4599.  
  4600.  
  4601.         H.2.8  Double Operand Instructions 
  4602.  
  4603.                 adca    []              adcb    []
  4604.         
  4605.                 adda    []              addb    []
  4606.         
  4607.                 anda    []              andb    []
  4608.         
  4609.                 bita    []              bitb    []
  4610.         
  4611.                 cmpa    []              cmpb    []
  4612.         
  4613.                 eora    []              eorb    []
  4614.         
  4615.                 ldaa    []      <=>     lda     []
  4616.         
  4617.                 ldab    []      <=>     ldb     []
  4618.         
  4619.                 oraa    []      <=>     ora     []
  4620.         
  4621.                 orab    []      <=>     orb     []
  4622.         
  4623.                 sbca    []              sbcb    []
  4624.         
  4625.                 staa    []      <=>     sta     []
  4626.         
  4627.                 stab    []      <=>     stb     []
  4628.         
  4629.                 suba    []              subb    []
  4630.  
  4631.  
  4632.         H.2.9  Move Instructions 
  4633.  
  4634.                 movb    [],[]           movw    [],[]
  4635.  
  4636.  
  4637.         H.2.10  D-register Instructions 
  4638.  
  4639.                 addd    []              subd    []
  4640.                 cpd     []      <=>     cmpd    []
  4641.                 ldd     []              std     []
  4642.  
  4643.  
  4644.         AS6812 ASSEMBLER                                        PAGE H-7
  4645.         68HC12 INSTRUCTION SET
  4646.  
  4647.  
  4648.         H.2.11  Index/Stack Register Instructions 
  4649.  
  4650.                 cps     []      <=>     cmps    []
  4651.                 cpx     []      <=>     cmpx    []
  4652.                 cpy     []      <=>     cmpy    []
  4653.         
  4654.                 lds     []
  4655.                 ldx     []              ldy     []
  4656.         
  4657.                 leas    []
  4658.                 leax    []              leay    []
  4659.         
  4660.                 sts     []
  4661.                 stx     []              sty     []
  4662.  
  4663.  
  4664.         H.2.12  Jump and Jump/Call to Subroutine Instructions 
  4665.  
  4666.                 call    [],pg
  4667.                 jmp     []              jsr     []
  4668.  
  4669.  
  4670.         H.2.13  Other Special Instructions 
  4671.  
  4672.                 emacs   []
  4673.                 emaxd   []              emaxm   []
  4674.                 emind   []              eminm   []
  4675.                 etbl    []
  4676.                 maxa    []              maxm    []
  4677.                 mina    []              minm    []
  4678.                 tbl     []              trap    #data
  4679.  
  4680.  
  4681.         H.2.14  Register - Register Instructions 
  4682.  
  4683.                 exg     r1,r2           sex     r1,r2
  4684.                 tfr     r1,r2
  4685.  
  4686.  
  4687.         H.2.15  Condition Code Register Instructions 
  4688.  
  4689.                 andcc   #data           orcc    #data
  4690.  
  4691.  
  4692.         AS6812 ASSEMBLER                                        PAGE H-8
  4693.         68HC12 INSTRUCTION SET
  4694.  
  4695.  
  4696.         H.2.16  M68HC11 Compatibility Mode Instructions 
  4697.  
  4698.                 abx             aby             clc
  4699.                 cli             clv             des
  4700.                 ins             sec             sei
  4701.                 sev             tap             tpa
  4702.                 tsx             tsy             txs
  4703.                 tys             xgdx            xgdy
  4704.  
  4705.  
  4706.  
  4707.  
  4708.  
  4709.  
  4710.  
  4711.  
  4712.  
  4713.  
  4714.  
  4715.  
  4716.  
  4717.  
  4718.                                    APPENDIX I
  4719.  
  4720.                                 AS6816 ASSEMBLER
  4721.  
  4722.  
  4723.  
  4724.  
  4725.  
  4726.         I.1  68HC16 REGISTER SET 
  4727.  
  4728.         The following is a list of the 68HC16 registers used by AS6816: 
  4729.  
  4730.                 a,b     -       8-bit accumulators
  4731.                 d       -       16-bit accumulator <a:b>
  4732.                 e       -       16-bit accumulator
  4733.                 x,y,z   -       index registers
  4734.                 k       -       address extension register
  4735.                 s       -       stack pointer
  4736.                 ccr     -       condition code
  4737.  
  4738.  
  4739.         I.2  68HC16 INSTRUCTION SET 
  4740.  
  4741.  
  4742.            The  following tables list all 68HC16 mnemonics recognized by
  4743.         the AS6816 assembler.  The designation [] refers to  a  required
  4744.         addressing  mode  argument.   The  following  list specifies the
  4745.         format for each addressing mode supported by AS6816:  
  4746.  
  4747.                 #data           immediate data
  4748.                                 byte or word data
  4749.         
  4750.                 #xo,#yo         local immediate data (mac / rmac)
  4751.         
  4752.                 label           branch label
  4753.         
  4754.                 r               register
  4755.                                 ccr,a,b,d,e,x,y,z,s
  4756.         
  4757.                 ,x              zero offset register indexed addressing
  4758.                 ,x8
  4759.                 ,x16
  4760.         
  4761.                 offset,x        register indexed addressing
  4762.  
  4763.  
  4764.         AS6816 ASSEMBLER                                        PAGE I-2
  4765.         68HC16 INSTRUCTION SET
  4766.  
  4767.  
  4768.                                      0 <= offset <= 255   ---  8-bit
  4769.                                 -32768 <= offset <= -1    --- 16-bit
  4770.                                    256 <= offset <= 32767 --- 16-bit
  4771.                                 (external definition of offset
  4772.                                  uses 16-bit mode)
  4773.         
  4774.                 offset,x8       unsigned 8-bit offset indexed addressing
  4775.                 offset,x16      signed 16-bit offset indexed addressing
  4776.         
  4777.                 e,x             accumulator offset indexed addressing
  4778.         
  4779.                 ext             extended addressing
  4780.         
  4781.                 bank            64K bank number (jmp / jsr)
  4782.  
  4783.         The  terms data, label, offset, bank, and ext may all be expres-
  4784.         sions.  
  4785.  
  4786.            Note  that  not all addressing modes are valid with every in-
  4787.         struction, refer to the 6816 technical data for valid modes.  
  4788.  
  4789.  
  4790.         I.2.1  Inherent Instructions 
  4791.  
  4792.                 aba             abx             aby             abz
  4793.                 ace             aced            ade             adx
  4794.                 ady             adz             aex             aey
  4795.                 aez             bgnd            cba             daa
  4796.                 ediv            edivs           emul            emuls
  4797.                 fdiv            fmuls           idiv            ldhi
  4798.                 lpstop          mul             nop             psha
  4799.                 pshb            pshmac          pula            pulb
  4800.                 pulmac          rtr             rts             sba
  4801.                 sde             sted            swi             sxt
  4802.                 tab             tap             tba             tbek
  4803.                 tbsk            tbxk            tbyk            tbzk
  4804.                 tde             tdmsk           tdp             ted
  4805.                 tedm            tekb            tem             tmer
  4806.                 tmet            tmxed           tpa             tpd
  4807.                 tskb            tsx             tsy             tsz
  4808.                 txkb            txs             txy             txz
  4809.                 tykb            tys             tyx             tyz
  4810.                 tzkb            tzs             tzx             tzy
  4811.                 wai             xgab            xgde            xgdx
  4812.                 xgdy            xgdz            xgex            xgey
  4813.                 xgez
  4814.  
  4815.  
  4816.         AS6816 ASSEMBLER                                        PAGE I-3
  4817.         68HC16 INSTRUCTION SET
  4818.  
  4819.  
  4820.         I.2.2  Push/Pull Multiple Register Instructions 
  4821.  
  4822.                 pshm    r,...           pulm    r,...
  4823.  
  4824.  
  4825.         I.2.3  Short Branch Instructions 
  4826.  
  4827.                 bcc     label           bcs     label
  4828.                 beq     label           bge     label
  4829.                 bgt     label           bhi     label
  4830.                 bhis    label           bhs     label
  4831.                 ble     label           blo     label
  4832.                 blos    label           bls     label
  4833.                 blt     label           bmi     label
  4834.                 bne     label           bpl     label
  4835.                 bra     label           brn     label
  4836.                 bvc     label           bvs     label
  4837.                 bsr     label
  4838.  
  4839.  
  4840.         I.2.4  Long Branch Instructions 
  4841.  
  4842.                 lbcc    label           lbcs    label
  4843.                 lbeq    label           lbge    label
  4844.                 lbgt    label           lbhi    label
  4845.                 lbhis   label           lbhs    label
  4846.                 lble    label           lblo    label
  4847.                 lblos   label           lbls    label
  4848.                 lblt    label           lbmi    label
  4849.                 lbne    label           lbpl    label
  4850.                 lbra    label           lbrn    label
  4851.                 lbvc    label           lbvs    label
  4852.                 lbsr    label
  4853.  
  4854.  
  4855.         I.2.5  Bit Manipulation Instructions 
  4856.  
  4857.                 bclr    [],#data
  4858.                 bset    [],#data
  4859.         
  4860.                 brclr   [],#data,label
  4861.                 brset   [],#data,label
  4862.  
  4863.  
  4864.         AS6816 ASSEMBLER                                        PAGE I-4
  4865.         68HC16 INSTRUCTION SET
  4866.  
  4867.  
  4868.         I.2.6  Single Operand Instructions 
  4869.  
  4870.                 asla                    aslb
  4871.                 asld                    asle
  4872.                 aslm
  4873.                 asl     []              aslw    []
  4874.         
  4875.                 asra                    asrb
  4876.                 asrd                    asre
  4877.                 asrm
  4878.                 asr     []              asrw    []
  4879.         
  4880.                 clra                    clrb
  4881.                 clrd                    clre
  4882.                                         clrm
  4883.                 clr     []              clrw    []
  4884.         
  4885.                 coma                    comb
  4886.                 comd                    come
  4887.                 com     []              comw    []
  4888.         
  4889.                 deca                    decb
  4890.                 dec     []              decw    []
  4891.         
  4892.                 inca                    incb
  4893.                 inc     []              incw    []
  4894.         
  4895.                 lsla                    lslb
  4896.                 lsld                    lsle
  4897.                 lslm
  4898.                 lsl     []              lslw    []
  4899.         
  4900.                 lsra                    lsrb
  4901.                 lsrd                    lsre
  4902.                 lsr     []              lsrw    []
  4903.         
  4904.                 nega                    negb
  4905.                 negd                    nege
  4906.                 neg     []              negw    []
  4907.         
  4908.                 rola                    rolb
  4909.                 rold                    role
  4910.                 rol     []              rolw    []
  4911.         
  4912.                 rora                    rorb
  4913.                 rord                    rore
  4914.                 ror     []              rorw    []
  4915.         
  4916.                 tsta                    tstb
  4917.                 tsta                    tste
  4918.                 tst     []              tstw    []
  4919.  
  4920.  
  4921.         AS6816 ASSEMBLER                                        PAGE I-5
  4922.         68HC16 INSTRUCTION SET
  4923.  
  4924.  
  4925.         I.2.7  Double Operand Instructions 
  4926.  
  4927.                 adca    []              adcb    []
  4928.                 adcd    []              adce    []
  4929.         
  4930.                 adda    []              addb    []
  4931.                 addd    []              adde    []
  4932.         
  4933.                 anda    []              andb    []
  4934.                 andd    []              ande    []
  4935.         
  4936.                 bita    []              bitb    []
  4937.         
  4938.                 cmpa    []              cmpb    []
  4939.                 cpd     []              cpe     []
  4940.         
  4941.                 eora    []              eorb    []
  4942.                 eord    []              eore    []
  4943.         
  4944.                 ldaa    []              ldab    []
  4945.                 ldd     []              lde     []
  4946.         
  4947.                 oraa    []              orab    []
  4948.                 ord     []              ore     []
  4949.         
  4950.                 sbca    []              sbcb    []
  4951.                 sbcd    []              sbce    []
  4952.         
  4953.                 staa    []              stab    []
  4954.                 std     []              ste     []
  4955.         
  4956.                 suba    []              subb    []
  4957.                 subd    []              sube    []
  4958.  
  4959.  
  4960.         I.2.8  Index/Stack Register Instructions 
  4961.  
  4962.                 cps     []              cpx     []
  4963.                 cpy     []              cpz     []
  4964.         
  4965.                 lds     []              ldx     []
  4966.                 ldy     []              ldz     []
  4967.         
  4968.                 sts     []              stx     []
  4969.                 sty     []              stz     []
  4970.  
  4971.  
  4972.         AS6816 ASSEMBLER                                        PAGE I-6
  4973.         68HC16 INSTRUCTION SET
  4974.  
  4975.  
  4976.         I.2.9  Jump and Jump to Subroutine Instructions 
  4977.  
  4978.                 jmp     bank,[]         jsr     bank,[]
  4979.  
  4980.  
  4981.         I.2.10  Condition Code Register Instructions 
  4982.  
  4983.                 andp    #data           orp     #data
  4984.  
  4985.  
  4986.         I.2.11  Multiply and Accumulate Instructions 
  4987.  
  4988.                 mac     #data           rmac    #data
  4989.                 mac     #xo,#yo         rmac    #xo,#yo
  4990.  
  4991.  
  4992.  
  4993.  
  4994.  
  4995.  
  4996.  
  4997.  
  4998.  
  4999.  
  5000.  
  5001.  
  5002.  
  5003.  
  5004.                                    APPENDIX J
  5005.  
  5006.                                  ASH8 ASSEMBLER
  5007.  
  5008.  
  5009.  
  5010.  
  5011.  
  5012.         J.1  H8/3XX REGISTER SET 
  5013.  
  5014.         The following is a list of the H8 registers used by ASH8:  
  5015.  
  5016.                 r0  -  r7,sp            16-bit accumulators
  5017.                 r0L -  r7L,spL          8-bit accumulators
  5018.                 r0H -  r7H,spH          8-bit accumulators
  5019.                 spL,spH,sp              stack pointers
  5020.                 ccr                     condition code
  5021.  
  5022.  
  5023.         J.2  H8/3XX INSTRUCTION SET 
  5024.  
  5025.  
  5026.            The  following tables list all H8/3xx mnemonics recognized by
  5027.         the ASH8 assembler.  The designation [] refers to a required ad-
  5028.         dressing mode argument.  The following list specifies the format
  5029.         for each addressing mode supported by ASH8:  
  5030.  
  5031.                 #xx:3           immediate data (3  bit)
  5032.                 #xx:8           immediate data (8  bit)
  5033.                 #xx:16          immediate data (16 bit)
  5034.         
  5035.                 *dir            direct page addressing
  5036.                                 (see .setdp directive)
  5037.                                 0xFF00 <= dir <= 0xFFFF
  5038.         
  5039.                 label           branch label
  5040.         
  5041.         
  5042.                 rn              registers (16 bit)
  5043.                                 r0-r7,sp
  5044.         
  5045.                 rnB             registers (8 bit)
  5046.                                 r0H-r7H,r0L-r7L,spH,spL
  5047.         
  5048.  
  5049.  
  5050.         ASH8 ASSEMBLER                                          PAGE J-2
  5051.         H8/3XX INSTRUCTION SET
  5052.  
  5053.  
  5054.                 ccr             condition code register
  5055.         
  5056.                 @rn             register indirect
  5057.         
  5058.                 @-rn            register indirect (auto pre-decrement)
  5059.         
  5060.                 @rn+            register indirect (auto post-increment)
  5061.         
  5062.                 @[offset,rn]    register indirect, 16-bit displacement
  5063.         
  5064.                 @@offset        memory indirect, (8-bit address)
  5065.         
  5066.                 ext             extended addressing (16-bit)
  5067.  
  5068.         The  terms  data, dir, label, offset, and ext may all be expres-
  5069.         sions.  
  5070.  
  5071.            Note  that  not all addressing modes are valid with every in-
  5072.         struction, refer to the H8/3xx technical data for valid modes.  
  5073.  
  5074.  
  5075.         J.2.1  Inherent Instructions 
  5076.  
  5077.                 eepmov
  5078.                 nop
  5079.                 sleep
  5080.                 rte
  5081.                 rts
  5082.  
  5083.  
  5084.         J.2.2  Branch Instructions 
  5085.  
  5086.                 bcc     label                   bcs     label
  5087.                 beq     label                   bf      label
  5088.                 bge     label                   bgt     label
  5089.                 bhi     label                   bhis    label
  5090.                 bhs     label                   ble     label
  5091.                 blo     label                   blos    label
  5092.                 bls     label                   blt     label
  5093.                 bmi     label                   bne     label
  5094.                 bpl     label                   bra     label
  5095.                 brn     label                   bt      label
  5096.                 bvc     label                   bvs     label
  5097.                 bsr     label
  5098.  
  5099.  
  5100.         ASH8 ASSEMBLER                                          PAGE J-3
  5101.         H8/3XX INSTRUCTION SET
  5102.  
  5103.  
  5104.         J.2.3  Single Operand Instructions 
  5105.  
  5106.                 Free Form
  5107.         
  5108.                 daa     rnB                     das     rnB
  5109.         
  5110.                 dec     rnB                     inc     rnB
  5111.         
  5112.                 neg     rnB                     not     rnB
  5113.         
  5114.                 rotxl   rnB                     rotxr   rnB
  5115.         
  5116.                 rotl    rnB                     rotr    rnB
  5117.         
  5118.                 shal    rnB                     shar    rnB
  5119.         
  5120.                 shll    rnB                     shlr    rnB
  5121.         
  5122.                 push    rn                      pop     rn
  5123.         
  5124.         
  5125.                 Byte / Word Form
  5126.         
  5127.                 daa.b   rnB                     das.b   rnB
  5128.         
  5129.                 dec.b   rnB                     inc.b   rnB
  5130.         
  5131.                 neg.b   rnB                     not.b   rnB
  5132.         
  5133.                 rotxl.b rnB                     rotxr.b rnB
  5134.         
  5135.                 rotl.b  rnB                     rotr.b  rnB
  5136.         
  5137.                 shal.b  rnB                     shar.b  rnB
  5138.         
  5139.                 shll.b  rnB                     shlr.b  rnB
  5140.         
  5141.                 push.w  rn                      pop.w   rn
  5142.  
  5143.  
  5144.         ASH8 ASSEMBLER                                          PAGE J-4
  5145.         H8/3XX INSTRUCTION SET
  5146.  
  5147.  
  5148.         J.2.4  Double Operand Instructions 
  5149.  
  5150.                 Free Form
  5151.         
  5152.                 add     rnB,rnB                 add     #xx:8,rnB
  5153.                 add     rn,rn
  5154.                 adds    #1,rn                   adds    #2,rn
  5155.                 addx    rnB,rnB                 addx    #xx:8,rnB
  5156.         
  5157.                 cmp     rnB,rnB                 cmp     #xx:8,rnB
  5158.                 cmp     rn,rn
  5159.         
  5160.                 sub     rnB,rnB
  5161.                 sub     rn,rn
  5162.                 subs    #1,rn                   subs    #2,rn
  5163.                 subx    rnB,rnB                 subx    #xx:8,rnB
  5164.         
  5165.                 and     rnB,rnB                 and     #xx:8,rnB
  5166.                                                 and     #xx:8,ccr
  5167.         
  5168.                 or      rnB,rnB                 or      #xx:8,rnB
  5169.                                                 or      #xx:8,ccr
  5170.         
  5171.                 xor     rnB,rnB                 xor     #xx:8,rnB
  5172.                                                 xor     #xx:8,ccr
  5173.         
  5174.         
  5175.                 Byte / Word Form
  5176.         
  5177.                 add.b   rnB,rnB                 add.b   #xx:8,rnB
  5178.                 add.w   rn,rn
  5179.         
  5180.                 cmp.b   rnB,rnB                 cmp.b   #xx:8,rnB
  5181.                 cmp.w   rn,rn
  5182.         
  5183.                 sub.b   rnB,rnB
  5184.                 sub.w   rn,rn
  5185.         
  5186.                 addx.b  rnB,rnB                 addx.b  #xx:8,rnB
  5187.         
  5188.                 and.b   rnB,rnB                 and.b   #xx:8,rnB
  5189.                                                 and.b   #xx:8,ccr
  5190.         
  5191.                 or.b    rnB,rnB                 or.b    #xx:8,rnB
  5192.                                                 or.b    #xx:8,ccr
  5193.         
  5194.                 subx.b  rnB,rnB                 subx.b  #xx:8,rnB
  5195.         
  5196.                 xor.b   rnB,rnB                 xor.b   #xx:8,rnB
  5197.                                                 xor.b   #xx:8,ccr
  5198.  
  5199.  
  5200.         ASH8 ASSEMBLER                                          PAGE J-5
  5201.         H8/3XX INSTRUCTION SET
  5202.  
  5203.  
  5204.         J.2.5  Mov Instructions 
  5205.  
  5206.                 Free Form
  5207.         
  5208.                 mov     rnB,rnB                 mov     rn,rn
  5209.                 mov     #xx:8,rnB               mov     #xx:16,rn
  5210.                 mov     @rn,rnB                 mov     @rn,rn
  5211.                 mov     @[offset,rn],rnB        mov     @[offset,rn],rn
  5212.                 mov     @rn+,rnB                mov     @rn+,rn
  5213.                 mov     @dir,rnB
  5214.                 mov     dir,rnB
  5215.                 mov     *@dir,rnB
  5216.                 mov     *dir,rnB
  5217.                 mov     @label,rnB              mov     @label,rn
  5218.                 mov     label,rnB               mov     label,rn
  5219.                 mov     rnB,@rn                 mov     rn,@rn
  5220.                 mov     rnB,@[offset,rn]        mov     rn,@[offset,rn]
  5221.                 mov     rnB,@-rn                mov     rn,@-rn
  5222.                 mov     rnB,@dir
  5223.                 mov     rnB,dir
  5224.                 mov     rnB,*@dir
  5225.                 mov     rnB,*dir
  5226.                 mov     rnB,@label              mov     rn,@label
  5227.                 mov     rnB,label               mov     rn,label
  5228.         
  5229.         
  5230.                 Byte / Word Form
  5231.         
  5232.                 mov.b   rnB,rnB                 mov.w   rn,rn
  5233.                 mov.b   #xx:8,rnB               mov.w   #xx:16,rn
  5234.                 mov.b   @rn,rnB                 mov.w   @rn,rn
  5235.                 mov.b   @[offset,rn],rnB        mov.w   @[offset,rn],rn
  5236.                 mov.b   @rn+,rnB                mov.w   @rn+,rn
  5237.                 mov.b   @dir,rnB
  5238.                 mov.b   dir,rnB
  5239.                 mov.b   *@dir,rnB
  5240.                 mov.b   *dir,rnB
  5241.                 mov.b   @label,rnB              mov.w   @label,rn
  5242.                 mov.b   label,rnB               mov.w   label,rn
  5243.                 mov.b   rnB,@rn                 mov.w   rn,@rn
  5244.                 mov.b   rnB,@[offset,rn]        mov.w   rn,@[offset,rn]
  5245.                 mov.b   rnB,@-rn                mov.w   rn,@-rn
  5246.                 mov.b   rnB,@dir
  5247.                 mov.b   rnB,dir
  5248.                 mov.b   rnB,*@dir
  5249.                 mov.b   rnB,*dir
  5250.                 mov.b   rnB,@label              mov.w   rn,@label
  5251.                 mov.b   rnB,label               mov.w   rn,label
  5252.  
  5253.  
  5254.         ASH8 ASSEMBLER                                          PAGE J-6
  5255.         H8/3XX INSTRUCTION SET
  5256.  
  5257.  
  5258.         J.2.6  Bit Manipulation Instructions 
  5259.  
  5260.                 bld     #xx:3,rnB               bld     #xx:3,@rn
  5261.                 bld     #xx:3,@dir              bld     #xx:3,dir
  5262.                 bld     #xx:3,*@dir             bld     #xx:3,*dir
  5263.         
  5264.                 bild    #xx:3,rnB               bild    #xx:3,@rn
  5265.                 bild    #xx:3,@dir              bild    #xx:3,dir
  5266.                 bild    #xx:3,*@dir             bild    #xx:3,*dir
  5267.         
  5268.                 bst     #xx:3,rnB               bst     #xx:3,@rn
  5269.                 bst     #xx:3,@dir              bst     #xx:3,dir
  5270.                 bst     #xx:3,*@dir             bst     #xx:3,*dir
  5271.         
  5272.                 bist    #xx:3,rnB               bist    #xx:3,@rn
  5273.                 bist    #xx:3,@dir              bist    #xx:3,dir
  5274.                 bist    #xx:3,*@dir             bist    #xx:3,*dir
  5275.         
  5276.                 band    #xx:3,rnB               band    #xx:3,@rn
  5277.                 band    #xx:3,@dir              band    #xx:3,dir
  5278.                 band    #xx:3,*@dir             band    #xx:3,*dir
  5279.         
  5280.                 biand   #xx:3,rnB               biand   #xx:3,@rn
  5281.                 biand   #xx:3,@dir              biand   #xx:3,dir
  5282.                 biand   #xx:3,*@dir             biand   #xx:3,*dir
  5283.         
  5284.                 bor     #xx:3,rnB               bor     #xx:3,@rn
  5285.                 bor     #xx:3,@dir              bor     #xx:3,dir
  5286.                 bor     #xx:3,*@dir             bor     #xx:3,*dir
  5287.         
  5288.                 bior    #xx:3,rnB               bior    #xx:3,@rn
  5289.                 bior    #xx:3,@dir              bior    #xx:3,dir
  5290.                 bior    #xx:3,*@dir             bior    #xx:3,*dir
  5291.         
  5292.                 bxor    #xx:3,rnB               bxor    #xx:3,@rn
  5293.                 bxor    #xx:3,@dir              bxor    #xx:3,dir
  5294.                 bxor    #xx:3,*@dir             bxor    #xx:3,*dir
  5295.         
  5296.                 bixor   #xx:3,rnB               bixor   #xx:3,@rn
  5297.                 bixor   #xx:3,@dir              bixor   #xx:3,dir
  5298.                 bixor   #xx:3,*@dir             bixor   #xx:3,*dir
  5299.  
  5300.  
  5301.         ASH8 ASSEMBLER                                          PAGE J-7
  5302.         H8/3XX INSTRUCTION SET
  5303.  
  5304.  
  5305.         J.2.7  Extended Bit Manipulation Instructions 
  5306.  
  5307.                 bset    #xx:3,rnB               bset    #xx:3,@rn
  5308.                 bset    #xx:3,@dir              bset    #xx:3,dir
  5309.                 bset    #xx:3,*@dir             bset    #xx:3,*dir
  5310.                 bset    rnB,rnB                 bset    rnB,@rn
  5311.                 bset    rnB,@dir                bset    rnB,dir
  5312.                 bset    rnB,*@dir               bset    rnB,*dir
  5313.         
  5314.                 bclr    #xx:3,rnB               bclr    #xx:3,@rn
  5315.                 bclr    #xx:3,@dir              bclr    #xx:3,dir
  5316.                 bclr    #xx:3,*@dir             bclr    #xx:3,*dir
  5317.                 bclr    rnB,rnB                 bclr    rnB,@rn
  5318.                 bclr    rnB,@dir                bclr    rnB,dir
  5319.                 bclr    rnB,*@dir               bclr    rnB,*dir
  5320.         
  5321.                 bnot    #xx:3,rnB               bnot    #xx:3,@rn
  5322.                 bnot    #xx:3,@dir              bnot    #xx:3,dir
  5323.                 bnot    #xx:3,*@dir             bnot    #xx:3,*dir
  5324.                 bnot    rnB,rnB                 bnot    rnB,@rn
  5325.                 bnot    rnB,@dir                bnot    rnB,dir
  5326.                 bnot    rnB,*@dir               bnot    rnB,*dir
  5327.         
  5328.                 btst    #xx:3,rnB               btst    #xx:3,@rn
  5329.                 btst    #xx:3,@dir              btst    #xx:3,dir
  5330.                 btst    #xx:3,*@dir             btst    #xx:3,*dir
  5331.                 btst    rnB,rnB                 btst    rnB,@rn
  5332.                 btst    rnB,@dir                btst    rnB,dir
  5333.                 btst    rnB,*@dir               btst    rnB,*dir
  5334.  
  5335.  
  5336.         J.2.8  Condition Code Instructions 
  5337.  
  5338.                 andc    #xx:8,ccr               andc    #xx:8
  5339.                 and     #xx:8,ccr               and.b   #xx:8,ccr
  5340.         
  5341.                 ldc     #xx:8,ccr               ldc     #xx:8
  5342.                 ldc     rnB,ccr                 ldc     rnB
  5343.         
  5344.                 orc     #xx:8,ccr               orc     #xx:8
  5345.                 or      #xx:8,ccr               or.b    #xx:8,ccr
  5346.         
  5347.                 xorc    #xx:8,ccr               xorc    #xx:8
  5348.                 xor     #xx:8,ccr               xor.b   #xx:8,ccr
  5349.         
  5350.                 stc     ccr,rnB                 stc     rnB
  5351.  
  5352.  
  5353.         ASH8 ASSEMBLER                                          PAGE J-8
  5354.         H8/3XX INSTRUCTION SET
  5355.  
  5356.  
  5357.         J.2.9  Other Instructions 
  5358.  
  5359.                 divxu   rnB,rn                  divxu.b rnB,rn
  5360.         
  5361.                 mulxu   rnB,rn                  mulxu.b rnB,rn
  5362.         
  5363.                 movfpe  @label,rnB              movfpe  label,rnB
  5364.                 movfpe.b  @label,rnB            movfpe.b  label,rnB
  5365.         
  5366.                 movtpe  @label,rnB              movtpe  label,rnB
  5367.                 movtpe.b  @label,rnB            movtpe.b  label,rnB
  5368.  
  5369.  
  5370.         J.2.10  Jump and Jump to Subroutine Instructions 
  5371.  
  5372.                 jmp     @rn                     jmp     @@dir
  5373.                 jmp     @label                  jmp     label
  5374.         
  5375.                 jsr     @rn                     jsr     @@dir
  5376.                 jsr     @label                  jsr     label
  5377.  
  5378.  
  5379.  
  5380.  
  5381.  
  5382.  
  5383.  
  5384.  
  5385.  
  5386.  
  5387.  
  5388.  
  5389.  
  5390.  
  5391.                                    APPENDIX K
  5392.  
  5393.                                 AS8085 ASSEMBLER
  5394.  
  5395.  
  5396.  
  5397.  
  5398.  
  5399.         K.1  8085 REGISTER SET 
  5400.  
  5401.         The  following  is  a  list  of  the 8080/8085 registers used by
  5402.         AS8085:  
  5403.  
  5404.                 a,b,c,d,e,h,l   -       8-bit accumulators
  5405.                 m               -       memory through (hl)
  5406.                 sp              -       stack pointer
  5407.                 psw             -       status word
  5408.  
  5409.  
  5410.         K.2  8085 INSTRUCTION SET 
  5411.  
  5412.  
  5413.            The  following tables list all 8080/8085 mnemonics recognized
  5414.         by the AS8085  assembler.   The  following  list  specifies  the
  5415.         format for each addressing mode supported by AS8085:  
  5416.  
  5417.                 #data           immediate data
  5418.                                 byte or word data
  5419.         
  5420.                 r,r1,r2         register or register pair
  5421.                                 psw,a,b,c,d,e,h,l
  5422.                                 bc,de,hl,sp,pc
  5423.         
  5424.                 m               memory address using (hl)
  5425.         
  5426.                 addr            direct memory addressing
  5427.         
  5428.                 label           call or jump label
  5429.  
  5430.         The terms data, m, addr, and label may be expressions.  
  5431.  
  5432.            Note  that  not all addressing modes are valid with every in-
  5433.         struction, refer to  the  8080/8085  technical  data  for  valid
  5434.         modes.  
  5435.  
  5436.  
  5437.         AS8085 ASSEMBLER                                        PAGE K-2
  5438.         8085 INSTRUCTION SET
  5439.  
  5440.  
  5441.         K.2.1  Inherent Instructions 
  5442.  
  5443.                 cma             cmc
  5444.                 daa             di
  5445.                 ei              hlt
  5446.                 nop             pchl
  5447.                 ral             rar
  5448.                 ret             rim
  5449.                 rrc             rlc
  5450.                 sim             sphl
  5451.                 stc             xchg
  5452.                 xthl
  5453.  
  5454.  
  5455.         K.2.2  Register/Memory/Immediate Instructions 
  5456.  
  5457.                 adc     r       adc     m       aci     #data
  5458.                 add     r       add     m       adi     #data
  5459.                 ana     r       ana     m       ani     #data
  5460.                 cmp     r       cmp     m       cpi     #data
  5461.                 ora     r       ora     m       ori     #data
  5462.                 sbb     r       sbb     m       sbi     #data
  5463.                 sub     r       sub     m       sui     #data
  5464.                 xra     r       xra     m       xri     #data
  5465.  
  5466.  
  5467.         K.2.3  Call and Return Instructions 
  5468.  
  5469.                 cc      label           rc
  5470.                 cm      label           rm
  5471.                 cnc     label           rnc
  5472.                 cnz     label           rnz
  5473.                 cp      label           rp
  5474.                 cpe     label           rpe
  5475.                 cpo     label           rpo
  5476.                 cz      label           rz
  5477.                 call    label
  5478.  
  5479.  
  5480.         K.2.4  Jump Instructions 
  5481.  
  5482.                 jc      label
  5483.                 jm      label
  5484.                 jnc     label
  5485.                 jnz     label
  5486.                 jp      label
  5487.                 jpe     label
  5488.                 jpo     label
  5489.                 jz      label
  5490.                 jmp     label
  5491.  
  5492.  
  5493.         AS8085 ASSEMBLER                                        PAGE K-3
  5494.         8085 INSTRUCTION SET
  5495.  
  5496.  
  5497.         K.2.5  Input/Output/Reset Instructions 
  5498.  
  5499.                 in      data
  5500.                 out     data
  5501.                 rst     data
  5502.  
  5503.  
  5504.         K.2.6  Move Instructions 
  5505.  
  5506.                 mov     r1,r2
  5507.                 mov     r,m
  5508.                 mov     m,r
  5509.         
  5510.                 mvi     r,#data
  5511.                 mvi     m,#data
  5512.  
  5513.  
  5514.         K.2.7  Other Instructions 
  5515.  
  5516.                 dcr     r               dcr     m
  5517.                 inr     r               inr     m
  5518.         
  5519.                 dad     r               dcx     r
  5520.                 inx     r               ldax    r
  5521.                 pop     r               push    r
  5522.                 stax    r
  5523.         
  5524.                 lda     addr            lhld    addr
  5525.                 shld    addr            sta     addr
  5526.         
  5527.                 lxi     r,#data
  5528.  
  5529.  
  5530.  
  5531.  
  5532.  
  5533.  
  5534.  
  5535.  
  5536.  
  5537.  
  5538.  
  5539.  
  5540.  
  5541.  
  5542.                                    APPENDIX L
  5543.  
  5544.                                  ASZ80 ASSEMBLER
  5545.  
  5546.  
  5547.  
  5548.  
  5549.  
  5550.         L.1  .hd64 DIRECTIVE 
  5551.  
  5552.         Format:  
  5553.  
  5554.                 .hd64 
  5555.  
  5556.         The  .hd64  directive enables processing of the HD64180 specific
  5557.         mnemonics not included in  the  Z80  instruction  set.   HD64180
  5558.         mnemonics  encountered  without  the  .hd64  directive  will  be
  5559.         flagged with an 'o' error.  
  5560.  
  5561.  
  5562.         L.2  Z80 REGISTER SET AND CONDITIONS 
  5563.  
  5564.  
  5565.            The following is a complete list of register designations and
  5566.         condition mnemonics:  
  5567.  
  5568.                 byte registers  -       a,b,c,d,e,h,l,i,r
  5569.                 register pairs  -       af,af',bc,de,hl
  5570.                 word registers  -       pc,sp,ix,iy
  5571.         
  5572.                 C -     carry bit set
  5573.                 M -     sign bit set
  5574.                 NC -    carry bit clear
  5575.                 NZ -    zero bit clear
  5576.                 P -     sign bit clear
  5577.                 PE -    parity even
  5578.                 PO -    parity odd
  5579.                 Z -     zero bit set
  5580.  
  5581.  
  5582.  
  5583.  
  5584.         ASZ80 ASSEMBLER                                         PAGE L-2
  5585.         Z80 INSTRUCTION SET
  5586.  
  5587.  
  5588.         L.3  Z80 INSTRUCTION SET 
  5589.  
  5590.  
  5591.            The  following  tables  list all Z80/HD64180 mnemonics recog-
  5592.         nized by the ASZ80 assembler.  The designation []  refers  to  a
  5593.         required addressing mode argument.  The following list specifies
  5594.         the format for each addressing mode supported by ASZ80:  
  5595.  
  5596.                 #data           immediate data
  5597.                                 byte or word data
  5598.         
  5599.                 n               byte value
  5600.         
  5601.                 rg              a byte register
  5602.                                 a,b,c,d,e,h,l
  5603.         
  5604.                 rp              a register pair
  5605.                                 bc,de,hl
  5606.         
  5607.                 (hl)            implied addressing or
  5608.                                 register indirect addressing
  5609.         
  5610.                 (label)         direct addressing
  5611.         
  5612.                 offset(ix)      indexed addressing with
  5613.                                 an offset
  5614.         
  5615.                 label           call/jmp/jr label
  5616.  
  5617.         The  terms  data,  dir,  offset, and ext may all be expressions.
  5618.         The terms dir and offset are not allowed to be  external  refer-
  5619.         ences.  
  5620.  
  5621.            Note  that  not all addressing modes are valid with every in-
  5622.         struction, refer to the Z80/HD64180  technical  data  for  valid
  5623.         modes.  
  5624.  
  5625.  
  5626.         ASZ80 ASSEMBLER                                         PAGE L-3
  5627.         Z80 INSTRUCTION SET
  5628.  
  5629.  
  5630.         L.3.1  Inherent Instructions 
  5631.  
  5632.                 ccf             cpd
  5633.                 cpdr            cpi
  5634.                 cpir            cpl
  5635.                 daa             di
  5636.                 ei              exx
  5637.                 halt            neg
  5638.                 nop             reti
  5639.                 retn            rla
  5640.                 rlca            rld
  5641.                 rra             rrca
  5642.                 rrd             scf
  5643.  
  5644.  
  5645.         L.3.2  Implicit Operand Instructions 
  5646.  
  5647.                 adc     a,[]            adc     []
  5648.                 add     a,[]            add     []
  5649.                 and     a,[]            and     []
  5650.                 cp      a,[]            cp      []
  5651.                 dec     a,[]            dec     []
  5652.                 inc     a,[]            inc     []
  5653.                 or      a,[]            or      []
  5654.                 rl      a,[]            rl      []
  5655.                 rlc     a,[]            rlc     []
  5656.                 rr      a,[]            rr      []
  5657.                 rrc     a,[]            rrc     []
  5658.                 sbc     a,[]            sbc     []
  5659.                 sla     a,[]            sla     []
  5660.                 sra     a,[]            sra     []
  5661.                 srl     a,[]            srl     []
  5662.                 sub     a,[]            sub     []
  5663.                 xor     a,[]            xor     []
  5664.  
  5665.  
  5666.         ASZ80 ASSEMBLER                                         PAGE L-4
  5667.         Z80 INSTRUCTION SET
  5668.  
  5669.  
  5670.         L.3.3  Load Instruction 
  5671.  
  5672.                 ld      rg,[]           ld      [],rg
  5673.                 ld      (bc),a          ld      a,(bc)
  5674.                 ld      (de),a          ld      a,(de)
  5675.                 ld      (label),a       ld      a,(label)
  5676.                 ld      (label),rp      ld      rp,(label)
  5677.                 ld      i,a             ld      r,a
  5678.                 ld      a,i             ld      a,r
  5679.                 ld      sp,hl           ld      sp,ix
  5680.                 ld      sp,iy           ld      rp,#data
  5681.         
  5682.                 ldd                     lddr
  5683.                 ldi                     ldir
  5684.  
  5685.  
  5686.         L.3.4  Call/Return Instructions 
  5687.  
  5688.                 call    C,label         ret     C
  5689.                 call    M,label         ret     M
  5690.                 call    NC,label        ret     NC
  5691.                 call    NZ,label        ret     NZ
  5692.                 call    P,label         ret     P
  5693.                 call    PE,label        ret     PE
  5694.                 call    PO,label        ret     PO
  5695.                 call    Z,label         ret     Z
  5696.                 call    label           ret
  5697.  
  5698.  
  5699.         L.3.5  Jump and Jump to Subroutine Instructions 
  5700.  
  5701.                 jp      C,label         jp      M,label
  5702.                 jp      NC,label        jp      NZ,label
  5703.                 jp      P,label         jp      PE,label
  5704.                 jp      PO,label        jp      Z,label
  5705.         
  5706.                 jp      (hl)            jp      (ix)
  5707.                 jp      (iy)            jp      label
  5708.         
  5709.                 djnz    label
  5710.         
  5711.                 jr      C,label         jr      NC,label
  5712.                 jr      NZ,label        jr      Z,label
  5713.                 jr      label
  5714.  
  5715.  
  5716.         ASZ80 ASSEMBLER                                         PAGE L-5
  5717.         Z80 INSTRUCTION SET
  5718.  
  5719.  
  5720.         L.3.6  Bit Manipulation Instructions 
  5721.  
  5722.                 bit     n,[]
  5723.                 res     n,[]
  5724.                 set     n,[]
  5725.  
  5726.  
  5727.         L.3.7  Interrupt Mode and Reset Instructions 
  5728.  
  5729.                 im      n
  5730.                 im      n
  5731.                 im      n
  5732.                 rst     n
  5733.  
  5734.  
  5735.         L.3.8  Input and Output Instructions 
  5736.  
  5737.                 in      a,(n)           in      rg,(c)
  5738.                 ind                     indr
  5739.                 ini                     inir
  5740.         
  5741.                 out     (n),a           out     (c),rg
  5742.                 outd                    otdr
  5743.                 outi                    otir
  5744.  
  5745.  
  5746.         L.3.9  Register Pair Instructions 
  5747.  
  5748.                 add     hl,rp           add     ix,rp
  5749.                 add     iy,rp
  5750.         
  5751.                 adc     hl,rp           sbc     hl,rp
  5752.         
  5753.                 ex      (sp),hl         ex      (sp),ix
  5754.                 ex      (sp),iy
  5755.                 ex      de,hl
  5756.                 ex      af,af'
  5757.         
  5758.                 push    rp              pop     rp
  5759.  
  5760.  
  5761.         ASZ80 ASSEMBLER                                         PAGE L-6
  5762.         Z80 INSTRUCTION SET
  5763.  
  5764.  
  5765.         L.3.10  HD64180 Specific Instructions 
  5766.  
  5767.                 in0     rg,(n)
  5768.                 out0    (n),rg
  5769.         
  5770.                 otdm                    otdmr
  5771.                 otim                    otimr
  5772.         
  5773.                 mlt     bc              mlt     de
  5774.                 mlt     hl              mlt     sp
  5775.         
  5776.                 slp
  5777.         
  5778.                 tst     a
  5779.                 tstio   #data
  5780.  
  5781.  
  5782.  
  5783.  
  5784.  
  5785.  
  5786.  
  5787.  
  5788.  
  5789.  
  5790.  
  5791.  
  5792.  
  5793.  
  5794.                                    APPENDIX M
  5795.  
  5796.                                 AS6500 ASSEMBLER
  5797.  
  5798.  
  5799.  
  5800.  
  5801.  
  5802.         M.1  ACKNOWLEDGMENT 
  5803.  
  5804.  
  5805.            Thanks  to  Marko  Makela  for his contribution of the AS6500
  5806.         cross assembler.  
  5807.  
  5808.                 Marko Makela
  5809.                 Sillitie 10 A
  5810.                 01480 Vantaa
  5811.                 Finland
  5812.                 Internet: Marko.Makela@Helsinki.Fi
  5813.                 EARN/BitNet: msmakela@finuh
  5814.  
  5815.            Several  additions and modifications were made to his code to
  5816.         support the following families of 6500 processors:  
  5817.  
  5818.                 (1)     650X and 651X processor family
  5819.                 (2)     65F11 and 65F12 processor family
  5820.                 (3)     65C00/21 and 65C29 processor family
  5821.                 (4)     65C02, 65C102, and 65C112 processor family
  5822.  
  5823.            The  instruction  syntax of this cross assembler contains two
  5824.         peculiarities:  (1) the addressing indirection is denoted by the
  5825.         square  brackets  []  and (2) the `bbrx' and `bbsx' instructions
  5826.         are written `bbr0 memory,label'.  
  5827.  
  5828.  
  5829.  
  5830.  
  5831.         AS6500 ASSEMBLER                                        PAGE M-2
  5832.         6500 REGISTER SET
  5833.  
  5834.  
  5835.         M.2  6500 REGISTER SET 
  5836.  
  5837.         The following is a list of the 6500 registers used by AS6500:  
  5838.  
  5839.                 a       -       8-bit accumulator
  5840.                 x,y     -       index registers
  5841.  
  5842.  
  5843.         M.3  6500 INSTRUCTION SET 
  5844.  
  5845.  
  5846.            The  following  tables  list all 6500 family mnemonics recog-
  5847.         nized by the AS6500 assembler.  The designation [] refers  to  a
  5848.         required addressing mode argument.  The following list specifies
  5849.         the format for each addressing mode supported by AS6500:  
  5850.  
  5851.                 #data           immediate data
  5852.                                 byte or word data
  5853.         
  5854.                 *dir            direct page addressing
  5855.                                 (see .setdp directive)
  5856.                                 0 <= dir <= 255 
  5857.         
  5858.                 offset,x        indexed addressing
  5859.                 offset,y        indexed addressing
  5860.                                 address = (offset + (x or y))
  5861.         
  5862.                 [offset,x]      pre-indexed indirect addressing
  5863.                                 0 <= offset <= 255
  5864.                                 address = contents of location
  5865.                                     (offset + (x or y)) mod 256
  5866.         
  5867.                 [offset],y      post-indexed indirect addressing
  5868.                                 address = contents of location at offset
  5869.                                     plus the value of the y register
  5870.         
  5871.                 [address]       indirect addressing
  5872.         
  5873.                 ext             extended addressing
  5874.         
  5875.                 label           branch label
  5876.         
  5877.                 address,label   direct page memory location
  5878.                                 branch label
  5879.                                 bbrx and bbsx instruction addressing
  5880.  
  5881.         The  terms data, dir, offset, address, ext, and label may all be
  5882.         expressions.  
  5883.  
  5884.            Note  that  not all addressing modes are valid with every in-
  5885.         struction, refer to the 65xx technical data for valid modes.  
  5886.  
  5887.  
  5888.         AS6500 ASSEMBLER                                        PAGE M-3
  5889.         6500 INSTRUCTION SET
  5890.  
  5891.  
  5892.         M.3.1  Processor Specific Directives 
  5893.  
  5894.  
  5895.            The  AS6500  cross  assembler has four (4) processor specific
  5896.         assembler directives which  define  the  target  65xx  processor
  5897.         family:  
  5898.  
  5899.                 .r6500          Core 650X and 651X family (default)
  5900.                 .r65f11         Core plus 65F11 and 65F12
  5901.                 .r65c00         Core plus 65C00/21 and 65C29
  5902.                 .r65c02         Core plus 65C02, 65C102, and 65C112
  5903.  
  5904.  
  5905.         M.3.2  65xx Core Inherent Instructions 
  5906.  
  5907.                 brk                     clc
  5908.                 cld                     cli
  5909.                 clv                     dex
  5910.                 dey                     inx
  5911.                 iny                     nop
  5912.                 pha                     php
  5913.                 pla                     plp
  5914.                 rti                     rts
  5915.                 sec                     sed
  5916.                 sei                     tax
  5917.                 tay                     tsx
  5918.                 txa                     txs
  5919.                 tya
  5920.  
  5921.  
  5922.         M.3.3  65xx Core Branch Instructions 
  5923.  
  5924.                 bcc     label           bhs     label
  5925.                 bcs     label           blo     label
  5926.                 beq     label           bmi     label
  5927.                 bne     label           bpl     label
  5928.                 bvc     label           bvs     label
  5929.  
  5930.  
  5931.         M.3.4  65xx Core Single Operand Instructions 
  5932.  
  5933.                 asl     []
  5934.                 dec     []
  5935.                 inc     []
  5936.                 lsr     []
  5937.                 rol     []
  5938.                 ror     []
  5939.  
  5940.  
  5941.         AS6500 ASSEMBLER                                        PAGE M-4
  5942.         6500 INSTRUCTION SET
  5943.  
  5944.  
  5945.         M.3.5  65xx Core Double Operand Instructions 
  5946.  
  5947.                 adc     []
  5948.                 and     []
  5949.                 bit     []
  5950.                 cmp     []
  5951.                 eor     []
  5952.                 lda     []
  5953.                 ora     []
  5954.                 sbc     []
  5955.                 sta     []
  5956.  
  5957.  
  5958.         M.3.6  65xx Core Jump and Jump to Subroutine Instructions 
  5959.  
  5960.                 jmp     []              jsr     []
  5961.  
  5962.  
  5963.         M.3.7  65xx Core Miscellaneous X and Y Register Instructions 
  5964.  
  5965.                 cpx     []
  5966.                 cpy     []
  5967.                 ldx     []
  5968.                 stx     []
  5969.                 ldy     []
  5970.                 sty     []
  5971.  
  5972.  
  5973.         AS6500 ASSEMBLER                                        PAGE M-5
  5974.         6500 INSTRUCTION SET
  5975.  
  5976.  
  5977.         M.3.8  65F11 and 65F12 Specific Instructions 
  5978.  
  5979.                 bbr0    [],label                bbr1    [],label
  5980.                 bbr2    [],label                bbr3    [],label
  5981.                 bbr4    [],label                bbr5    [],label
  5982.                 bbr6    [],label                bbr7    [],label
  5983.         
  5984.                 bbs0    [],label                bbs1    [],label
  5985.                 bbs2    [],label                bbs3    [],label
  5986.                 bbs4    [],label                bbs5    [],label
  5987.                 bbs6    [],label                bbs7    [],label
  5988.         
  5989.                 rmb0    []                      rmb1    []
  5990.                 rmb2    []                      rmb3    []
  5991.                 rmb4    []                      rmb5    []
  5992.                 rmb6    []                      rmb7    []
  5993.         
  5994.                 smb0    []                      smb1    []
  5995.                 smb2    []                      smb3    []
  5996.                 smb4    []                      smb5    []
  5997.                 smb6    []                      smb7    []
  5998.  
  5999.  
  6000.         M.3.9  65C00/21 and 65C29 Specific Instructions 
  6001.  
  6002.                 bbr0    [],label                bbr1    [],label
  6003.                 bbr2    [],label                bbr3    [],label
  6004.                 bbr4    [],label                bbr5    [],label
  6005.                 bbr6    [],label                bbr7    [],label
  6006.         
  6007.                 bbs0    [],label                bbs1    [],label
  6008.                 bbs2    [],label                bbs3    [],label
  6009.                 bbs4    [],label                bbs5    [],label
  6010.                 bbs6    [],label                bbs7    [],label
  6011.         
  6012.                 bra     label
  6013.         
  6014.                 phx                             phy
  6015.                 plx                             ply
  6016.         
  6017.                 rmb0    []                      rmb1    []
  6018.                 rmb2    []                      rmb3    []
  6019.                 rmb4    []                      rmb5    []
  6020.                 rmb6    []                      rmb7    []
  6021.         
  6022.                 smb0    []                      smb1    []
  6023.                 smb2    []                      smb3    []
  6024.                 smb4    []                      smb5    []
  6025.                 smb6    []                      smb7    []
  6026.  
  6027.  
  6028.         AS6500 ASSEMBLER                                        PAGE M-6
  6029.         6500 INSTRUCTION SET
  6030.  
  6031.  
  6032.         M.3.10  65C02, 65C102, and 65C112 Specific Instructions 
  6033.  
  6034.                 bbr0    [],label                bbr1    [],label
  6035.                 bbr2    [],label                bbr3    [],label
  6036.                 bbr4    [],label                bbr5    [],label
  6037.                 bbr6    [],label                bbr7    [],label
  6038.         
  6039.                 bbs0    [],label                bbs1    [],label
  6040.                 bbs2    [],label                bbs3    [],label
  6041.                 bbs4    [],label                bbs5    [],label
  6042.                 bbs6    [],label                bbs7    [],label
  6043.         
  6044.                 bra     label
  6045.         
  6046.                 phx                             phy
  6047.                 plx                             ply
  6048.         
  6049.                 rmb0    []                      rmb1    []
  6050.                 rmb2    []                      rmb3    []
  6051.                 rmb4    []                      rmb5    []
  6052.                 rmb6    []                      rmb7    []
  6053.         
  6054.                 smb0    []                      smb1    []
  6055.                 smb2    []                      smb3    []
  6056.                 smb4    []                      smb5    []
  6057.                 smb6    []                      smb7    []
  6058.         
  6059.                 stz     []
  6060.                 trb     []
  6061.                 tsb     []
  6062.  
  6063.            Additional  addressing  modes for the following core instruc-
  6064.         tions are also available with the 65C02, 65C102, and 65C112 pro-
  6065.         cessors.  
  6066.  
  6067.                 adc     []                      and     []
  6068.                 cmp     []                      eor     []
  6069.                 lda     []                      ora     []
  6070.                 sbc     []                      sta     []
  6071.         
  6072.                 bit     []                      jmp     []
  6073.         
  6074.                 dec                             inc
  6075.